gpt4 book ai didi

c++ - Windows 对其 Unicode 数据类型使用什么 unicode 编码(UTF-8、UTF-16 等)?

转载 作者:可可西里 更新时间:2023-11-01 12:44:59 24 4
gpt4 key购买 nike

同一个Unicode(标准化)有不同的编码table .例如对于 UTF-8 编码 A corresponds to 0x0041 但对于 UTF-16 编码,相同的 Arepresented as 0xfeff0041

从这里brilliant article我了解到,当我使用 C++ 为 Windows 平台编程并处理 Unicode 时,我应该知道它以 2 个字节表示。但它没有说明任何关于编码的内容。 (即使它说 x86 CPU 是小端,所以我知道这两个字节是如何存储在内存中的。)但是我还应该知道 Unicode 的编码,这样我就有了关于符号如何存储在内存中的完整信息。是否有针对 C++/Windows 程序员的固定 Unicode 编码?

最佳答案

存储在 Windows 内存中的值始终是 UTF-16 little-endian。但这不是您所说的 - 您正在查看文件内容。 Windows 本身不指定文件的编码,而是将其留给各个应用程序。

您在文件开头看到的 0xfe 0xff 是一个 Byte Order Mark or BOM .它不仅表明该文件很可能是 Unicode,而且还告诉您 Unicode 编码的变体。

0xfe 0xff      UTF-16 big-endian
0xff 0xfe UTF-16 little-endian
0xef 0xbb 0xbf UTF-8

没有 BOM 的文件应该被假定为 8 位字符,除非您知道它是如何编写的。这仍然没有告诉您它是 UTF-8 还是其他一些 Windows 字符编码,您只能猜测。

您可以使用记事本作为如何完成此操作的示例。如果文件有 BOM,则记事本将读取它并适本地处理内容。否则,您必须使用“编码”下拉列表自行指定编码。

编辑:Windows 文档没有更具体地说明编码的原因是 Windows 是 Unicode 的早期采用者,当时有 only one encoding of 16 bits per code point .当确定 65536 个代码点不足时,发明了代理对作为扩展范围的一种方式,UTF-16 就诞生了。微软已经在使用 Unicode 来指代他们的编码并且从未改变过。

关于c++ - Windows 对其 Unicode 数据类型使用什么 unicode 编码(UTF-8、UTF-16 等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13499920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com