当从字节转换为UTF-8编码的字符串的字符,如何在计算机知道一个字符结尾?(When convert

2019-08-18 03:51发布

鉴于UTF-8编码的Unicode字符串,该字符串是在存储器中只是字节。

如果计算机想这些字节转换到其对应的Unicode代码点(数字),怎么能知道一个字符结束和另一个开始? 一些字符是由1个字节,最多6个字节表示,等等。 所以,如果你有

00111101 10111001

这可能代表2个字符,或1如何计算机确定它是正确解读呢? 是否有某种约定,从中我们可以从当前字符多少字节使用的第一个字节或什么认识?

Answer 1:

多字节序列的第一个字节编码在前导1比特的数目的序列的长度:

  • 0xxxxxxx是自己的一种性格;
  • 10xxxxxx是一个多字节字符的延续;
  • 110xxxxx是2字节字符的第一个字节;
  • 1110xxxx是一个3字节字符的第一个字节;
  • 11110xxx是一个4字节字符的第一个字节。

具有多于4前导1位字节不以UTF-8编码的有效字符,因为4个字节的序列已经覆盖比为U + 10FFFF的整个Unicode范围从U + 0000以上。

所以,在这个问题提出的示例中有一个ASCII字符和一个延续字节不编码自身的字符。



文章来源: When converting a utf-8 encoded string from bytes to characters, how does the computer know where a character ends?