我对字符集,编码等知识存在差距。在Windows-1252和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)?
答案 0 :(得分:2)
该字符仅由其 Unicode代码点表示,即U + 20AC。它不表示Latin-9 / CP1252编码表中的字节值。它只是以这种方式列出,可能是为了消除这个字符的确切含义; Unicode表是一个非常好的规范参考。
您通过xxd
运行的文件显然是以UTF-8编码的,其中"€"使用字节E2 82 AC
进行编码。