宽字符Windows

Yip*_*Yay 4 c++ windows unicode utf-16

Windows将wchar_t符号定义为16位长.但是,使用的UTF-16编码告诉我们一些符号实际上可能用4个字节(32位)编码.

这是否意味着如果我正在为Windows以下声明开发应用程序:

wchar_t symbol = ... // Whatever
Run Code Online (Sandbox Code Playgroud)

可能只代表实际符号的一部分?


如果我*nixwchar_t32位长的地方做同样的事情会发生什么?

ybu*_*ill 7

是的,这意味着symbol可能在Windows上拥有代理对的一部分.On *nixes wchar_t是32位长,将保留整个Unicode字符集.请注意,Unicode代码点不代表字符,因为某些字符可能由多个Unicode代码点编码,因此根本无法计算字符数.特别是这意味着在Unicode库之外的任何地方使用除UTF-8编码的窄字符串之外的任何东西都没有意义,即使在Windows上也是如此.

阅读这个旧帖子了解详情.

  • @ExpExc:不,我没有.字符可以由多个*codepoint*表示,当然也可以由多个*codeunit*表示.例如,`U + 0061 U + U0306`是两个*代码点*并代表单个字符"á".在CJK脚本中,它更加明显. (2认同)