UTF-8连续字节

Mar*_*cny 20 unicode utf-8

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

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

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

pax*_*blo 40

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
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到Unicode代码点如何映射到UTF-8多字节字节序列及其等效二进制值.

基本规则如下:

  1. 如果一个字节以0位开头,则它是一个小于128的单字节值.
  2. 如果以它开头11,则它是多字节序列的第一个字节,并且1开始时的位数表示总共有多少字节(110xxxxx有两个字节,1110xxxx有三个,11110xxx有四个).
  3. 如果以它开头10,那么它是一个连续字节.

这种区别允许非常方便的处理,例如能够从序列中的任何字节备份以找到该代码点的第一个字节.只需向后搜索,直到找到一个不是以10比特开头.

类似地,它也可以strlen通过仅计算非10xxxxxx字节来用于UTF-8 .