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

标签 windows encoding utf-8

如果这个问题很愚蠢,请原谅,这让我有点困惑,假设我在 Windows XP 上有一个应用程序(无论是 C、C++、.NET 或 Java),并且该应用程序将从远程计算机获取数据,数据中含有汉字,现在如果汉字变成了垃圾,那么说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(),无需转换。

关于windows - "Windows uses UTF-16 as its internal encoding",这到底是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950271/

相关文章:

windows - EC2 Windows 实例作为开发机器,需要在用户不活动 X 段时间后自动关闭

windows - 为什么 WinVerifyTrust 和 sigcheck 不同意文件是否有签名?

PHP 序列化将控制字符添加到对象属性名称?

hadoop - Hive Utf-8 编码支持的字符数?

使用 OpenCV 在 Linux 上为 Windows 交叉编译 C 代码

python - 删除文件时出错

r - knitr 无法编织 UTF-8 字符 : "These lines contain invalid UTF-8 characters"

python - 无法解析 Google Play 应用评分数据

python - String.encode 和 codecs.encode 之间有区别吗?

java - 从 jar 文件生成 UTF-8 文件