@DariV

UTF-8 — для чего нужен 0 после единиц в ведущем байте?

Если символ кодируется с помощью одного байта, старший бит принимает значение 0, для совместимости с ASCII. Если символ кодируется 2-4 байтами, то в ведущем байте 2-4 старших бита принимают значение 1, а после них идет 0. Для чего нужен 0, если теоретически единиц достаточно для определения границ символа?
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
@galaxy
Для чего нужен 0, если теоретически единиц достаточно для определения границ символа?

Для удобства. По стартовому байту последовательности (кодирующей символ) можно определить ее длину в байтах: сколько единичных страших битов, столько и байт в последовательности. Ноль обозначает конец серии единичных старших бит. Если бы не было этого нуля, невозможно было бы сказать, сколько старших бит установлено в стартовом байте (пришлось бы считывать байты дальше до тех пор, пока не встретится следующий стартовый байт или однобайтовый символ).
Т.е. допустим, вы видите такую последовательность (второй байт просто для иллюстрации, внимание на первый):
11110001 10xxxxxx
Если нуля бы не было, то это два байта, кодирующие символ Юникода 110001xxxxxx? Или это три байта, кодирующие символ 1001xxxxxx...? Или четыре, символ 001xxxxxx...?
Не получится понять, не считав до начала следующего символа.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы