在Win-1252和Latin9中,欧元符号字符如何能够高于0xFF?

时间:2015-08-27 07:51:56

标签: encoding character-encoding windows-1252

我对字符集,编码等知识存在差距。在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)?

1 个答案:

答案 0 :(得分:2)

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

您通过xxd运行的文件显然是以UTF-8编码的,其中"€"使用字节E2 82 AC进行编码。

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