Ответ 1
Байт продолжения в 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
Здесь вы можете увидеть, как точки кода Юникода сопоставляются с многобайтовыми байтовыми последовательностями UTF-8 и их эквивалентными двоичными значениями.
Основные правила таковы:
- Если байт начинается с бита
0
, это однобайтовое значение меньше 128. - Если он начинается с
11
, это первый байт многобайтовой последовательности, а число бит1
в начале указывает, сколько байтов есть в целом (110xxxxx
имеет два байта,1110xxxx
> имеет три и11110xxx
имеет четыре). - Если он начинается с
10
, он является байтом продолжения.
Это различие позволяет довольно удобную обработку, такую как возможность резервного копирования из любого байта в последовательности, чтобы найти первый байт этой кодовой точки. Просто выполните поиск в обратном порядке, пока не найдете бит, начинающийся с битов 10
.
Аналогичным образом, он также может использоваться для UTF-8 strlen
путем подсчета не 10xxxxxx
байтов.