Windows 将 wchar_t
符号定义为 16 位长。然而,使用的UTF-16
编码告诉我们,有些符号实际上可能是用4字节(32位)编码的。
这是否意味着如果我正在为 Windows
开发应用程序,则以下语句:
wchar_t symbol = ... // Whatever
可能只代表实际符号的一部分?
如果我在 *nix
下做同样的事情会发生什么,其中 wchar_t
是 32 位长?
最佳答案
是的,这意味着 symbol
在 Windows 上可能包含代理项对的一部分。在 *nixes
上,wchar_t
的长度为 32 位,将包含整个 Unicode 字符集。请注意,一个 Unicode 代码点并不代表一个字符,因为某些字符可能由多个 Unicode 代码点编码,因此计算字符数根本没有意义。特别是,这意味着在 Unicode 库之外的任何地方使用 UTF-8 编码的窄字符字符串以外的任何内容都没有意义,即使在 Windows 上也是如此。
阅读this old thread了解详情。
关于c++ - 宽字符窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375681/