Подтвердить что ты не робот

UTF-8 Продолжение байтов

Я пытаюсь выяснить, какие "байты продолжения" (для любопытства) используются в кодировке UTF-8.

Википедия вводит этот термин в статье UTF-8, не определяя его вообще

Поиск Google не возвращает никакой полезной информации. Я собираюсь перейти в официальную спецификацию, но сначала буду сначала читать сводку высокого уровня.

4b9b3361

Ответ 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 байтов.

Ответ 2

Короче говоря, байты продолжения - это байты, за исключением первого байта или одного байта. В UTF-8 начальные байты начинаются с 0x10.

Ответ 3

"Продолжающийся байт" - это не термин, а нормальное английское слово и термин "байт". Если он используется как псевдотерминал, он может запутать читателя.

Стандарт Unicode использует это выражение только в одном месте, Ch. 5, раздел 5.22: "Например, рассмотрим первые три байта четырехбайтовой последовательности UTF-8, за которыми следует байт, который не может быть допустимым байтом продолжения:." В этом контексте смысл ясен: его просто байт продолжает что-то, а именно последовательность байтов.

Википедия, по-видимому, использует "продолжение байта" для обозначения любого байта в кодировке UTF-8, кроме первого байта кодированной формы символа.