Я прошу подсчитать все возможные допустимые комбинации в Юникоде с объяснением.
1111998 : 17 самолетов × 65 536 знаков на самолет - 2048 суррогатов - 66 несимволов
Обратите внимание, что UTF-8 и UTF-32 теоретически могут кодировать гораздо больше, чем 17 плоскостей, но диапазон ограничен из-за ограничений кодирования UTF-16 .
137 929 кодовых точек фактически присвоены в Unicode 12.1 .
Я также не понимаю, почему байты продолжения имеют ограничения, хотя начальный байт этого символа очищает, как долго он должен быть.
Цель этого ограничения в UTF-8 - сделать кодировку самосинхронизирующейся .
В качестве контрпримера рассмотрим китайскую кодировку GB 18030 . Там буква ß
представлена как последовательность байтов 81 30 89 38
, которая содержит кодировку цифр 0
и 8
. Поэтому, если у вас есть функция поиска по строке, не предназначенная для этой специфической особенности кодирования, то поиск цифры 8
приведет к ложному срабатыванию внутри буквы ß
.
В UTF-8 этого не может произойти, потому что отсутствие перекрытия между ведущими байтами и конечными байтами гарантирует, что кодирование более короткого символа никогда не может произойти в кодировке более длинного символа.