4

Я изучаю стандарты UTF-8, и вот что я изучаю:

Definition and bytes used
UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx 10xxxxxx                   2 bytes for 8 to 11 bits chars
1110xxxx 10xxxxxx 10xxxxxx          3 bytes for 12 to 16 bits chars
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4 bytes for 17 to 21 bits chars

И мне интересно, почему 2- байтовый код UTF-8 не является 10xxxxxx вместо этого, таким образом, получая 1 бит до 22 бит с 4-байтовым кодом UTF-8? Как сейчас, потеряно 64 возможных значения (от 1000000 до 10111111). Я не пытаюсь утверждать стандарты, но мне интересно, почему это так?

** РЕДАКТИРОВАТЬ **

Даже почему бы и нет

UTF-8 binary representation         Meaning
0xxxxxxx                            1 byte for 1 to 7 bits chars
110xxxxx xxxxxxxx                   2 bytes for 8 to 13 bits chars
1110xxxx xxxxxxxx xxxxxxxx          3 bytes for 14 to 20 bits chars
11110xxx xxxxxxxx xxxxxxxx xxxxxxxx 4 bytes for 21 to 27 bits chars

...?

Спасибо!

1 ответ1

8

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

Допустим, в вашей схеме есть два символа: 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

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

Для редактирования: если верхний бит свободен, анализаторы UTF-8 знают, что они ищут символ, представленный в одном октете. Если он установлен, это многооктетный символ.

Все дело в исправлении ошибок и простой классификации октетов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .