欧元符号字符如何在 Win-1252 和 Latin9 中成为高于 0xFF 的值?

How can Euro sign character be a value higher than 0xFF in Win-1252 and Latin9?

我对字符集、编码等的了解存在差距。在 Windows-1252 and ISO/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)?

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

您从 运行 到 xxd 的文件显然是用 UTF-8 编码的,其中“€”是使用字节 E2 82 AC.

编码的

您可能想从这里开始:What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text