为什么 Degree符号与UTF-8和Unicode不同?
根据 http://www.utf8-chartable.de/ 和 http://www.fileformat.info/info/unicode/char/b0/index.htm,Unicode是B0,但是UTF-8是C2 B0怎么来的?
UTF-8 是一种使用可变字节数对 UTF 字符进行编码的方法(字节数取决于代码点)。
U+0080 和 U+07FF 之间的代码点使用以下 2 字节编码:
110xxxxx 10xxxxxx
其中
x
表示正在编码的代码点的位。
让我们考虑U+00B0。在二进制中,0xB0 是 10110000。如果将这些位代入上述模板,则得到:
11000010 10110000
以十六进制表示,这是 0xC2 0xB0。
UTF-8 是 Unicode 的一种编码。 UTF-16 和 UTF-32 是 Unicode 的其他编码。
Unicode为每个字符定义了一个数值;度数符号恰好是 0xB0,即十进制的 176。 Unicode 没有定义这些数值的表示方式。
UTF-8 将值
0xB0
编码为两个连续的八位位组(字节),其值为 0xC2 0xB0
。
UTF-16 将相同的值编码为
0x00 0xB0
或 0xB0 0x00
,具体取决于字节顺序。
UTF-32 将其编码为
0x00 0x00 0x00 0xB0
或 0xB0 0x00 0x00 0x00
,同样取决于字节顺序(我想其他顺序也是可能的)。
Unicode(UTF-16 和 UTF-32)对该字符使用代码点
0x00B0
。 UTF-8 不允许字符值高于 127 (0x007F
),因为每个字节的高位被保留以指示该特定字符实际上是多字节字符。
基本 7 位 ASCII 直接映射到 UTF-8 的前 128 个字符。任何值高于十进制 127(十六进制 7F)的字符都必须通过设置高位并添加 1 个或更多额外字节来描述来“转义”。
NPE、Marc 和 Keith 的回答很好,超出了我对这个主题的了解。但我还是得读了几遍才明白这是什么意思。然后我看到了这个网页,它让我“点击”了。
在 http://www.utf8-chartable.de/,您可以看到以下内容:
注意如何需要使用两个字节来编码一个字符。现在阅读 NPE 接受的答案。