“Windows使用UTF-16作为其内部编码”,这到底意味着什么?

对不起,如果问题是愚蠢的,这是有点困惑我,假设我有一个应用程序(无论是C,C + +,.NET或Java)在我的Windows XP,这个应用程序将从远程机器获取数据,数据包含汉字,现在如果汉字变成垃圾,说Windows与这个问题无关吗? 因为Windows使用UTF-16,并且可以正确处理汉字。

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

提前致谢。

要将任何文本存储在内存中并将其显示在屏幕上,操作系统需要在后台处理某些编码的文本。 什么编码是专门对你无关紧要的。 只要API接受某些文本并输出正确的东西,就可以将其作为HTML编码的ASCII处理。

“Windows在内部使用UTF-16”意味着Windows正好以UTF-16格式在内部存储和处理文本。 它也支持中文文本。 这两件事不一定连接。 是的,在内部使用UTF-16更容易支持中文,这也许是Windows工程师选择使用UTF-16的原因。

Windows NT内核使用UNICODE_STRING的命名对象(如文件)的许多(或是最?)。 编码是UTF-16。

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

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

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