【发布时间】:2011-06-03 07:08:59
【问题描述】:
我不太擅长编码,但这是我认为我知道的(尽管它可能是错误的):
- 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 文档中的“不透明字符数组”,但根据
fwprintf等函数的 C 标准,是否有任何标准化编码? - 什么是“ANSI”编码?这甚至是一个正确的术语吗?它与 ASCII 有什么关系?
- (我还有更多问题,但这已经足够了……反正我忘记了一些……)
这些问题很多,因此任何关于所有这些如何连接的解释链接(除了阅读 Unicode 标准,这对 Windows API 没有帮助)也将不胜感激。
谢谢!
【问题讨论】:
-
为什么 Unicode 标准对 Windows 没有帮助?我首选的参考资料是 O'Reilly 的书:oreilly.com/catalog/9780596101213
-
@David:因为它无法回答有关 A 与 W 函数的问题。不过感谢您对这本书的参考,它似乎很有趣。
-
这是一本好书。了解更多关于 Unicode 的一般背景有助于理解细节,尤其是您将更清楚地了解 Windows API 为何如此。
标签: winapi unicode ascii widechar multibyte-functions