UTF-8连续字节

时间:2012-02-20 04:24:51

标签: unicode utf-8

我试图找出UTF-8编码中的“延续字节”(为了好奇)。

维基百科在UTF-8 article中引入了这个术语而没有对其进行定义

Google搜索也没有返回有用的信息。我即将跳入官方规范,但最好首先阅读高级摘要。

3 个答案:

答案 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多字节字节序列及其等效二进制值。

基本规则如下:

  1. 如果一个字节以0位开头,则它是一个小于128的单字节值。
  2. 如果以11开头,则它是多字节序列的第一个字节,开头的1位数表示总共有多少字节(110xxxxx有两个字节,1110xxxx有三个,11110xxx有四个。
  3. 如果它以10开头,那么它是一个连续字节。
  4. 这种区别允许非常方便的处理,例如能够从序列中的任何字节备份以找到该代码点的第一个字节。只需向后搜索,直到找到一个不以10位开头的。

    同样,它也可以用于UTF-8 strlen,只计算非10xxxxxx个字节。

答案 1 :(得分:0)

简而言之,continuation字节是除第一个字节或单个字节之外的字节。在UTF-8中,连续字节以0x10开始。

答案 2 :(得分:0)

“延续字节”不是一个术语,而是一个普通的英语单词和术语“字节”。如果用作伪术语,可能会使读者感到困惑。

Unicode标准仅在一个地方使用此表达式Ch. 5,第5.22节:“例如,考虑一个四字节UTF-8序列的前三个字节,后跟一个不能是a的字节有效的连续字节:。“在这种情况下,含义很明确:它只是一个字节,它继续存在,即一个字节序列。

维基百科页面显然使用“延续字节”来表示UTF-8编码中的任何字节,但字符编码形式的第一个字节除外。