【问题标题】:Why Degree symbol differs from UTF-8 from unicode?为什么度数符号不同于 UTF-8 和 unicode?
【发布时间】:2012-02-02 15:48:55
【问题描述】:

为什么 Degree 符号不同于 UTF-8 和 unicode?​​p>

根据:http://www.utf8-chartable.de/ 和 http://www.fileformat.info/info/unicode/char/b0/index.htm

unicode 是 B0 但 UTF-8 是 C2 B0 怎么会!??

【问题讨论】:

  • 在 UTF-8 和 UTF-16 之间有数千个字符的表示方式不同。是什么让您相信学位符号值得特别对待?
  • 您需要了解 Unicode 及其各种编码之间的区别。阅读人们发布的链接。
  • @MikeNakis:我相信 all Unicode 码位在 UTF-8 和 UTF-16 中有不同的表示。

标签: unicode utf-8


【解决方案1】:

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

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

110xxxxx 10xxxxxx

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

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

 11000010 10110000

在十六进制中,这是 0xC2 0xB0。

【讨论】:

  • 而且,至关重要的是,这只是同一 Unicode 代码点 U+00B0 的不同表示。 UTF-16 使用 0x00 0xB0(大端)或 0xB0 0x00(小端),但 UTF-8 使用 0xC2 0xB0(无端)。
  • 您提供的链接很有帮助...谢谢
  • @JonathanLeffler "No endian-ness" 术语不恰当,但很有趣
  • @Userthatisnotauser 这是正确的术语。 en.wikipedia.org/wiki/Endianness
  • @clake 抱歉,我指的是破折号的奇怪位置。绝对同意! ??‍♂️
【解决方案2】:

UTF-8 是 Unicode 的一种编码。 UTF-16 和 UTF-32 是 Unicode 的其他编码。

Unicode 为每个字符定义了一个数值;度数符号恰好是 0xB0,或十进制的 176。 Unicode 没有定义这些数值的表示方式。

UTF-8 将值 0xB0 编码为两个连续的八位字节(字节),其值为 0xC2 0xB0。

UTF-16 将相同的值编码为 0x00 0xB0 或 0xBo 0x00,具体取决于字节序。

UTF-32 将其编码为0x00 0x00 0x00 0xB0 或0xB0 0x00 0x00 0x00,同样取决于字节序(我想其他排序也是可能的)。

【讨论】:

    【解决方案3】:

    Unicode(UTF-16 和 UTF-32)对该字符使用代码点 0x00B0。 UTF-8 不允许值大于 127 (0x007F) 的字符,因为每个字节的高位被保留以表明该特定字符实际上是一个多字节字符。

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

    【讨论】:

      【解决方案4】:

      NPE、Marc 和 Keith 的回答很好,超出了我对这个主题的了解。在我意识到这是关于什么之前,我仍然必须阅读它们几次。然后我看到了这个让我“点击”的网页。

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

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

      【讨论】:

      • 如果用户看不到该网站,它会将0x7F (DELETE) 显示为 UTF-8:7F,并将0x80 显示为 UTF-8:C2 80
      猜你喜欢
      • 2021-08-07
      • 2011-04-24
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-07-19
      • 1970-01-01
      相关资源
      最近更新 更多