【发布时间】:2017-09-06 03:53:31
【问题描述】:
我正在开发一个程序,它采用 unicode 字符的十六进制值并将其转换为整数,然后转换为字节数组,然后转换为 UTF-8 字符串。除了以下事实之外,一切都很好,例如,十六进制值 E2 82 AC(€ 符号)是十进制的 14 844 588,但是,如果您在下面提供的网页上查看它的代码点值,它是 226 130 172,相差很大。
http://utf8-chartable.de/unicode-utf8-table.pl?start=8320&number=128&names=-
如果您按十进制对它们的值进行排序,它们不仅仅是将十六进制转换为十进制。显然我并不像我想象的那样理解编码。
E2 82 AC 映射到 226 130 172 而不是 14 844 588。
为什么会出现这种差异?
提前致谢。
【问题讨论】:
-
您不能将可变长度的字节序列直接解释为数字。 0x00E282AC 确实是 14844588 但这只是巧合。
-
十六进制的字节序列
0xE20x820xAC分别是十进制的226130172。单个数字14,844,588(注意逗号,它们只是您问题中的空格)是十六进制的0xE282AC。十进制数是226130172,而不是226,130,172。你在比较两个不同的东西。你让空间迷惑了你。
标签: unicode encoding utf-8 hex