"Windows uses UTF-16 as its internal encoding",这到底是什么意思?



如果这个问题很愚蠢,请原谅,它让我有点困惑,假设我有一个应用程序(无论是C, c++,。. NET或Java)在我的Windows XP上,这个应用程序会从远程机器获取数据,数据中包含汉字,现在如果汉字变成垃圾,是不是说Windows与这个问题无关?因为Windows使用UTF-16,可以正确处理中文字符。

另一方面,假设Windows使用ASCII作为其内部编码,这是否意味着任何应用程序都不能正确显示中文字符?

Windows NT内核对许多(或大多数?)命名对象(例如文件)使用UNICODE_STRING。编码为UTF-16。

许多用户模式可调用api公开了几乎相同的函数对,其中一个接受Unicode字符串,另一个接受ANSI字符串。ANSI字符串版本最终将名称从ANSI转换为Unicode。

例如,当你调用C的fopen()函数时,它接受8位非Unicode文件名,它最终调用CreateFileA() (ANSI),并最终调用NtCreateFile(),它接受Unicode文件名。NtCreateFile()的一个参数,OBJECT_ATTRIBUTES结构,包含一个指向UNICODE_STRING结构的指针。

另一方面,如果调用msvc++的_wfopen()函数,它将通过CreateFileW() (Unicode)到达NtCreateFile(),而不需要转换。

要将任何文本存储在内存中并显示在屏幕上,操作系统需要在中处理一些编码的文本。具体是什么编码对您来说并不重要。只要api接受某些文本并输出正确的内容,它就可以将其处理为HTML编码的ASCII。

"Windows内部使用UTF-16 "意味着Windows内部碰巧以UTF-16存储和处理文本。它还支持中文文本。这两件事不一定有联系。是的,在内部使用UTF-16可以更容易地支持中文,这可能就是Windows工程师选择使用UTF-16的原因。

最新更新