在我当前的项目中,我一直在使用宽字符 (utf16)。但是由于用户的唯一输入将是一个 url,无论如何它都必须以 ascii 和另一个字符串结束,所以我正在考虑将整个程序切换为 ascii。
我的问题是,在将字符串传递给 Windows API 函数之前将它们转换为 utf16 有什么好处吗?
在网上做了一些研究后,如果您不在 Windows 上使用 UTF-16,似乎很多人都推荐这个。
最佳答案
在 Windows API 中,如果你调用像这样的函数
int SomeFunctionA(const char*);
然后它会自动将字符串转换为 UTF-16 并调用函数的真实、Unicode 版本:
int SomeFunctionW(const wchar_t*);
问题是,它将字符串转换为 UTF-16 从 ANSI 代码页。如果您实际上有在 ANSI 代码页中编码的字符串,那么它就可以正常工作。如果您有以 UTF-8 编码的字符串,这将不起作用,这在当今越来越普遍(例如 nearly 70% of Web pages ),并且不支持作为 ANSI 代码页。
此外,如果您使用 A
API,您将遇到一些限制,比如无法(轻松地)打开名称中包含非 ANSI 字符(可以是任意 UTF)的文件-16 弦)。并且无法访问某些 Windows 的 newer features。
这就是为什么我总是调用 W
函数。即使这意味着烦人的显式转换(来 self 们软件的非 Windows 特定部分中使用的 UTF-8 字符串)。
关于c++ - 在将 ASCII 字符串传递给 Windows API 函数之前将它们转换为 UTF-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202969/