给定一个以 UTF-8 编码的 Unicode 字符串,它只是内存中的字节。
如果一台计算机想要将这些字节转换为其相应的 Unicode 代码点(数字),它如何知道一个字符在哪里结束而另一个字符从哪里开始呢?有些字符用 1 个字节表示,有些则最多用 6 个字节表示。所以如果你有
00111101 10111001
这可能代表 2 个字符,或 1。计算机如何决定正确解释它的含义?是否有某种约定,我们可以从第一个字节中知道当前字符使用了多少字节?
给定一个以 UTF-8 编码的 Unicode 字符串,它只是内存中的字节。
如果一台计算机想要将这些字节转换为其相应的 Unicode 代码点(数字),它如何知道一个字符在哪里结束而另一个字符从哪里开始呢?有些字符用 1 个字节表示,有些则最多用 6 个字节表示。所以如果你有
00111101 10111001
这可能代表 2 个字符,或 1。计算机如何决定正确解释它的含义?是否有某种约定,我们可以从第一个字节中知道当前字符使用了多少字节?
多字节序列的第一个字节以前导 1 位的数量编码序列的长度:
0xxxxxxx
本身就是一个角色;10xxxxxx
是多字节字符的延续;110xxxxx
是 2 字节字符的第一个字节;1110xxxx
是 3 字节字符的第一个字节;11110xxx
是 4 字节字符的第一个字节。具有超过 4 个前导 1 位的字节不会对 UTF-8 中的有效字符进行编码,因为 4 字节序列已经覆盖了从 U+0000 到 U+10FFFF 的整个 Unicode 范围。
因此,问题中提出的示例具有一个 ASCII 字符和一个不单独编码字符的连续字节。