UTF-8:读者如何知道一个字符的字节数?
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)
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