“Windows使用UTF-16作为其内部编码”,这究竟是什么意思?

时间:2011-10-31 05:33:10

标签: windows encoding utf-8

打扰一下,如果这个问题很愚蠢,我觉得我的Windows XP上有一个应用程序(无论是C,C ++ ,. NET还是Java),而且这个应用程序将从远程计算机获取数据,数据包含中文字符,现在如果中文字符变成垃圾,那说Windows与此问题无关是否正确?因为Windows使用UTF-16,并且可以正确处理中文字符。

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

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()而不进行转换。

答案 1 :(得分:0)

要将任何文本存储在内存中并将其显示在屏幕上,操作系统需要在幕后以某些编码处理该文本。具体的编码对您来说无关紧要。只要API接受某些文本并输出正确的内容,它就可以将其作为HTML编码的ASCII处理,只要API接受某些文本即可。

“Windows内部使用UTF-16”意味着Windows恰好在内部存储和处理文本为UTF-16。它还支持中文文本。这两件事不一定是连在一起的。是的,在内部使用UTF-16可以更容易地支持中文,这可能是Windows工程师选择使用UTF-16的原因。