我试图找出UTF-8编码中的“延续字节”(为了好奇)。
维基百科在UTF-8 article中引入了这个术语而没有对其进行定义
Google搜索也没有返回有用的信息。我即将跳入官方规范,但最好首先阅读高级摘要。
答案 0 :(得分:38)
UTF-8中的连续字节是前两位为10
的任何字节。
它们是多字节序列中的后续字节。下表可能有所帮助:
Unicode code points Range Encoding Binary value
------------------- -------- --------------------------
U+000000-U+00007f 0xxxxxxx 0xxxxxxx
U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx
10xxxxxx
U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx
10yyyyxx
10xxxxxx
U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx
10zzyyyy
10yyyyxx
10xxxxxx
在这里,您可以看到Unicode代码点如何映射到UTF-8多字节字节序列及其等效二进制值。
基本规则如下:
0
位开头,则它是一个小于128的单字节值。11
开头,则它是多字节序列的第一个字节,开头的1
位数表示总共有多少字节(110xxxxx
有两个字节,1110xxxx
有三个,11110xxx
有四个。10
开头,那么它是一个连续字节。这种区别允许非常方便的处理,例如能够从序列中的任何字节备份以找到该代码点的第一个字节。只需向后搜索,直到找到一个不以10
位开头的。
同样,它也可以用于UTF-8 strlen
,只计算非10xxxxxx
个字节。
答案 1 :(得分:0)
简而言之,continuation字节是除第一个字节或单个字节之外的字节。在UTF-8中,连续字节以0x10开始。
答案 2 :(得分:0)
“延续字节”不是一个术语,而是一个普通的英语单词和术语“字节”。如果用作伪术语,可能会使读者感到困惑。
Unicode标准仅在一个地方使用此表达式Ch. 5,第5.22节:“例如,考虑一个四字节UTF-8序列的前三个字节,后跟一个不能是a的字节有效的连续字节:。“在这种情况下,含义很明确:它只是一个字节,它继续存在,即一个字节序列。
维基百科页面显然使用“延续字节”来表示UTF-8编码中的任何字节,但字符编码形式的第一个字节除外。