Что означает первый бит (т.е. двоичный 0) в стандарте кодирования UTF-8? - PullRequest
0 голосов
/ 07 июня 2018

Я PHP Разработчик по профессии.

Рассмотрим пример ниже:

Я хочу закодировать слово "привет" , используя UTF-8 кодировка.

Итак,

Эквивалентный код Точки каждой из букв слова "привет" указаны ниже:

h = 104
e = 101
l = 108
o = 111

Итак, мы можем сказать, что список десятичных чисел представляет строку "привет" :

104 101 108 108 111

Кодировка UTF-8 будет хранить "привет" следующим образом (двоичный код):

01101000 01100101 01101100 01101100  01101111

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

Мой вопрос заключается в том, почему этот начальный 0 имеет префикс перед каждым сохраняемым символом?Какова цель использования его в кодировке UTF-8?

Что было сделано, когда та же строка кодируется в формате UTF-16 ?

Если это необходимотогда может ли начальный дополнительный символ быть битовым значением 1?

Значит ли NUL Byte двоичный символ 0?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

UTF-8 обратно совместим с ASCII.ASCII использует значения 0 - 127 и присваивает им символы.Это означает байты от 0000 0000 до 0111 1111.UTF-8 сохраняет то же отображение для тех же первых 128 символов.

Любой символ, не найденный в ASCII, кодируется в виде 1xxx xxxx в UTF-8, то есть для любого не-ASCII символа старший биткаждого закодированного байта составляет 1.Эти символы кодируются в нескольких байтах в UTF-8.Первые биты первого байта в последовательности сообщают декодеру, из скольких байтов состоит символ;110x xxxx означает, что это 2-байтовый символ, 1110 xxxx 3-байтовый символ и 1111 0xxx 4-байтовый символ.Последовательные байты в последовательности имеют вид 10xx xxxx.Так что нет, вы не можете просто установить его на 1 произвольно.

Существуют различные расширения ASCII (например, ISO-8859), которые также устанавливают этот первый бит и тем самым добавляют еще 128 символовform 1xxx xxxx.

Также есть 7-битный ASCII, который пропускает первый 0 бит и просто использует 000 0000 - 111 1111.

Имеет NULБайт означает двоичный символ 0?

Это означает битовую последовательность 0000 0000, то есть байт со всеми нулями с десятичным / шестнадцатеричным / восьмеричным значением 0.

Возможно, вас заинтересует Что абсолютно необходимо каждому программисту знать о кодировках и наборах символов для работы с текстом .

0 голосов
/ 07 июня 2018

UTF-8 кодирует кодовые точки Unicode U + 0000 - U + 007F (которые являются символами ASCII 0-127), используя 7 бит.Восьмой бит используется для сигнализации, когда дополнительные байты необходимы только при кодировании кодовых точек Unicode U + 0080 - U + 10FFFF.

Например, è - это кодовая точка U + 00E8, которая кодируется в UTF-8.в байтах 0xC3 0xA8 (11000011 10101000 в двоичном виде). ​​

Википедия довольно хорошо объясняет, как кодируется UTF-8.

Означает ли NUL-байтдвоичный символ 0?

Да.

...