UTF-8 укусил представление

Я узнаю о стандартах 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

...?

Спасибо!

4
задан 16.11.2015, 15:37

1 ответ

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

Скажем, у Вас есть два символа в Вашей схеме: 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

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

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

Это - все о восстановлении после ошибки и легкой классификации октетов.

8
ответ дан 07.12.2019, 19:45

Теги

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