UTF-8 Продолжение байтов - PullRequest
18 голосов
/ 20 февраля 2012

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

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

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

Ответы [ 3 ]

38 голосов
/ 20 февраля 2012

Байт продолжения в 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, это байт продолжения.

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

Аналогично, его также можно использовать для UTF-8 strlen, считая только не-1032 * байтов.

0 голосов
/ 20 февраля 2012

«Байт продолжения» - это не термин, а обычное английское слово, и термин «байт». При использовании в качестве псевдотермы читатель может запутаться.

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

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

0 голосов
/ 20 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...