Почему кодировка UTF-8 не использует байты вида 11111xxx в качестве первого байта? - PullRequest
0 голосов
/ 22 февраля 2019

Согласно https://en.wikipedia.org/wiki/UTF-8, первый байт кодировки символа никогда не начинается с битовых комбинаций ни 10xxxxxx, ни 11111xxx.Причина первого очевидна: автосинхронизация.Но как насчет второго?Это что-то вроде потенциального расширения для включения 5-байтовой кодировки?

1 Ответ

0 голосов
/ 22 февраля 2019

Более старые версии UTF-8 допускают кодирование до 6 байтов.Позднее он был ограничен 4-байтовыми кодировками, но нет причин делать формат несовместимым для достижения этого ограничения.Число ведущих 1 указывает длину последовательности, поэтому 11111xxx по-прежнему означает «по крайней мере 5 байтов», таких правильных последовательностей просто нет.

Наличие недопустимых кодовых точек очень полезно для обнаружения повреждения (или болеекак правило, пытается декодировать данные, которые на самом деле не являются UTF-8).Поэтому несоответствие формата только для того, чтобы вернуть один бит памяти (который фактически ни для чего не мог быть использован), повредит другим целям.

...