7

给定一个以 UTF-8 编码的 Unicode 字符串,它只是内存中的字节。

如果一台计算机想要将这些字节转换为其相应的 Unicode 代码点(数字),它如何知道一个字符在哪里结束而另一个字符从哪里开始呢?有些字符用 1 个字节表示,有些则最多用 6 个字节表示。所以如果你有

00111101 10111001

这可能代表 2 个字符,或 1。计算机如何决定正确解释它的含义?是否有某种约定,我们可以从第一个字节中知道当前字符使用了多少字节?

4

1 回答 1

14

多字节序列的第一个字节以前导 1 位的数量编码序列的长度:

  • 0xxxxxxx本身就是一个角色;
  • 10xxxxxx是多字节字符的延续;
  • 110xxxxx是 2 字节字符的第一个字节;
  • 1110xxxx是 3 字节字符的第一个字节;
  • 11110xxx是 4 字节字符的第一个字节。

具有超过 4 个前导 1 位的字节不会对 UTF-8 中的有效字符进行编码,因为 4 字节序列已经覆盖了从 U+0000 到 U+10FFFF 的整个 Unicode 范围。

因此,问题中提出的示例具有一个 ASCII 字符和一个不单独编码字符的连续字节。

于 2013-03-28T17:41:43.957 回答