Байт продолжения в 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
, считая только не-1032 * байтов.