我对编码不是很专业,但这是我认为我知道的(尽管它可能是错误的):
- ASCII 是一种 7 位、固定长度的编码,您可以在 ASCII 图表中找到字符。
- UTF8 是一种 8 位的可变长度编码。所有字符都可以用 UTF8 编写。
- UCS-2 LE/BE 是固定长度的 16 位编码,支持最常见的字符。
- UTF-16 是一种 16 位的可变长度编码。所有字符都可以用 UTF16 书写。
以上这些都是正确的吗?
现在,对于问题:
- Windows“A”函数(如
SetWindowTextA
)是否接收 ASCII 字符串?还是“多字节字符串”(下面有更多问题)? - Windows "W" 函数接受 UTF-16 字符串还是 UCS-2 字符串?我以为他们接受 UCS-2,但名字让我感到困惑。
- 在WideCharToMultiByte中,Microsoft 使用“宽字符串”一词来表示 UTF-16。在这种情况下,什么被认为是“多字节字符串”?UTF-8?
- 是
LPWSTR
“宽字符串”吗?我会说它是,但是,那不是意味着它是 UTF-16 吗?这是否意味着它可以用来显示,比如说,4 字节字符?如果不是,那么...显示 4 字节字符是不可能的吗?(Windows 似乎没有这些 API。) WideCharToMultiByte
的超集的功能是wcstombs
, 并且它们都适用于相同类型的字符串吗?或者说,一个在 UTF-16 上工作,而另一个在 UCS-2 上工作?- 文件路径是 UTF-16 还是 UCS-2?我知道 Windows 将其视为 Microsoft 文档中的“不透明字符数组”,但根据 C 函数的标准,例如
fwprintf
,是否有任何标准化编码? - 什么是“ANSI”编码?这甚至是一个正确的术语吗?它与 ASCII 有什么关系?
- (我还有更多问题,但这已经足够了......我还是忘记了其中一些......)
这些问题很多,因此任何有关所有这些连接方式的解释链接(除了阅读 Unicode 标准,这对 Windows API 没有帮助)也将不胜感激。
谢谢!