winapi - Windows wchar_t如何处理基本多语言平面之外的Unicode字符?

标签 winapi unicode wchar-t

我在这里和其他地方也看过许多其他文章(请参见下文),但是对于这个问题,我仍然没有明确的答案:Windows wchar_t如何在基本的多语言平面之外处理Unicode字符?

那是:


many programmers seem to feel that UTF-16 is harmful,因为它是可变长度代码。
wchar_t is 16-bits wide on windows,但32-bits wide on Unix/MacOS
Windows API使用宽字符,而不是Unicode。


那么,当您想在Windows上编写诸如𠂊(U + 2008A)Han Character之类的代码时,Windows会做什么?

最佳答案

Windows stdlib下的wchar_t实现是UTF-16忽略的:它仅知道约16位代码单元。

因此,您可以将UTF-16代理序列放入字符串中,并且可以选择使用更高级别的处理将其视为单个字符。字符串实现不会帮助您,也不会阻止您。它可以让您在字符串中包含任何代码单元序列,即使是解释为UTF-16的代码单元序列也是如此。

Windows的许多高级功能确实支持UTF-16替代字符,这就是为什么您可以调用文件𐐀.txt并看到它正确呈现和正确编辑的原因(一次按下一次,而不是两次按下即可)在诸如Explorer之类的程序中移动字符,这些程序支持复杂的文本布局(通常使用Windows的Uniscribe库)。

但是仍然有一些地方可以看到UTF-16遗忘的光芒,例如您可以在与𐐀.txt相同的文件夹中创建一个名为𐐨.txt的文件,否则不区分大小写,或者您可以通过编程方式创建[U+DC01][U+D801].txt的事实。

这样,对于Windows是“支持” UTF-16字符串还是仅支持UCS-2,pedants可以拥有一个很好的长期且基本没有意义的论点。

关于winapi - Windows wchar_t如何处理基本多语言平面之外的Unicode字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870014/

相关文章:

python - 我可以阻止可执行文件请求 UAC 提升吗?

c# - SetupDiEnumDriverInfo 始终返回错误 259(没有更多可用数据)

C 获取字符的unicode代码点

windows - C/C++中的跨平台unicode : Which encoding to use?

windows - Delphi - CreateProcess - 执行多个命令

带有 bInitialOwner=true 的 CreateMutex 似乎表现得很奇怪

C++11 中的 Unicode 标识符和源代码?

git - 如何在 OS X 上的 Git 中处理文件名中的亚洲字符

c# - 如何自动将 const wchar_t* 从 C DLL 转换为 C# 字符串

c++ - 无法将 'const char*' 转换为 'LPCWSTR {aka const wchar_t*}'