UTF-8:读者如何知道一个字符占多少字节?

时间:2017-08-02 15:41:07

标签: utf-8

UTF-8可以用一个字节或更多字节表示每个字符。我们假设我有以下字节序列:

48 65

我怎么知道它是由48表示的一个字符和由65表示的另一个字符,还是由两个字节组合表示的一个字符{{ 1}}?

1 个答案:

答案 0 :(得分:2)

UTF-8的设计方式明确无误。 0x48或0x65或0x80以下的任何其他内容都不是多字节序列的一部分。

UTF-8编码代码点的第一个字节的最高有效位将告诉您使用了多少字节。这应该从UTF-8 Bit Distribution Table

中明确说明
Scalar Value                First Byte  Second Byte Third Byte  Fourth Byte
00000000 0xxxxxxx           0xxxxxxx            
00000yyy yyxxxxxx           110yyyyy    10xxxxxx        
zzzzyyyy yyxxxxxx           1110zzzz    10yyyyyy    10xxxxxx    
000uuuuu zzzzyyyy yyxxxxxx  11110uuu    10uuzzzz    10yyyyyy    10xxxxxx

所以,最糟糕的情况是你跳到字符串的中间位置并看到一个字节,其最高有效位为1然后是0(从0x80到0xBF的所有内容),这表示它是一个连续字节。在这种情况下,您必须回溯最多3个字节才能确定完整序列。