为什么“度”符号与 UTF-8 和 Unicode 不同?

问题描述 投票:0回答:4

为什么 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怎么来的?

unicode utf-8
4个回答
28
投票

UTF-8 是一种使用可变字节数对 UTF 字符进行编码的方法(字节数取决于代码点)。

U+0080 和 U+07FF 之间的代码点使用以下 2 字节编码

110xxxxx 10xxxxxx

其中

x
表示正在编码的代码点的位。

让我们考虑U+00B0。在二进制中,0xB0 是 10110000。如果将这些位代入上述模板,则得到:

 11000010 10110000

以十六进制表示,这是 0xC2 0xB0。


8
投票

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
,同样取决于字节顺序(我想其他顺序也是可能的)。


5
投票

Unicode(UTF-16 和 UTF-32)对该字符使用代码点

0x00B0
。 UTF-8 不允许字符值高于 127 (
0x007F
),因为每个字节的高位被保留以指示该特定字符实际上是多字节字符。

基本 7 位 ASCII 直接映射到 UTF-8 的前 128 个字符。任何值高于十进制 127(十六进制 7F)的字符都必须通过设置高位并添加 1 个或更多额外字节来描述来“转义”。


1
投票

NPE、Marc 和 Keith 的回答很好,超出了我对这个主题的了解。但我还是得读了几遍才明白这是什么意思。然后我看到了这个网页,它让我“点击”了。

http://www.utf8-chartable.de/,您可以看到以下内容:

UTF-8 needs C2 80 to represent U+0080

注意如何需要使用两个字节来编码一个字符。现在阅读 NPE 接受的答案。

© www.soinside.com 2019 - 2024. All rights reserved.