0

我对字符集、编码等方面的知识存在差距。在Windows-1252ISO/IEC 8859-15 (Latin-9) 代码页中,欧元符号 (€) 的值以 0x20AC 形式给出——十进制是8364!但是,当这种编码中的任何字符都必须适合单个无符号字节(即最大值可以是 255)时,这怎么可能呢?US-ASCII 占用值 0-127,而 128-255 是不同字符编码之间变化的地方。

当我将文本输入文本编辑器(vim)时:

a € b

并将其保存到编码为“latin9”的文件中。我看到这个文件包含以下字节:

$ xxd euro-file.txt
0000000: 6120 e282 ac20 620a                      a ... b.

好的,所以:

0x61 = 'a' character
0x20 = space character
0xE282 = ???
0xAC20 = This is the value of the Euro symbol, but the bytes are backwards; the reference said the value should be 0x20AC
0x62 = 'b' character

有人可以解释一下欧元字符如何具有高于 255 的值吗?为什么欧元字符的写入字节是向后的(0xAC20 而不是 0x20AC)?

4

1 回答 1

2

该字符仅由其Unicode 代码点表示,即 U+20AC。它不表示 Latin-9/CP1252 编码表中的字节值。它只是以这种方式列出,大概是为了消除确切含义的歧义;Unicode 表是一个很好的规范参考。

您正在运行的那个文件xxd显然是用 UTF-8 编码的,其中“€”是使用 bytes 编码的E2 82 AC

您可能想从这里开始:每个程序员绝对、肯定需要知道的关于使用文本的编码和字符集的知识。

于 2015-08-27T08:04:30.720 回答