UTF-8:读者如何知道一个字符的字节数?

UTF-8:读者如何知道一个字符的字节数?,utf-8,Utf 8,UTF-8可以用一个字节或多个字节表示每个字符。假设我有以下字节序列: 48 65 我怎么知道它是由48表示的一个字符和由65表示的另一个字符,还是由两个字节的组合表示的一个字符48 65?UTF-8的设计方式是明确的。0x48或0x65或0x80下的任何内容都不是多字节序列的一部分 UTF-8编码代码点的第一个字节的最高有效位将告诉您使用了多少字节。这一点应该从以下方面明确: 所以,最坏的情况是,你跳转到中间字符串的某个地方,看到一个字节,它的最高有效位是1,然后是0(从0x80到0xBF)

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

48 65

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

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

UTF-8编码代码点的第一个字节的最高有效位将告诉您使用了多少字节。这一点应该从以下方面明确:


所以,最坏的情况是,你跳转到中间字符串的某个地方,看到一个字节,它的最高有效位是1,然后是0(从0x80到0xBF),这表示它是一个连续字节。在这种情况下,您必须回溯最多3个字节以确定完整序列。

的可能重复,因为。此外,在涉及Unicode时,您应该小心使用术语。你在这里谈论的是个人的“代码点”。你可能认为是一个字符(或)可以由任意数量的单独的代码点组成。例如,字符
é
可以编码为
U+00E9
(“带锐音符的拉丁文小写字母E),或者编码为
U+0065
(拉丁文小写字母E),后跟
U+0301
(组合锐音符)。
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