Я прошу подсчет всех возможных действительных комбинаций в Юникоде с объяснением.
1 111 998 : 17 самолетов и времен; 65 536 знаков на самолет - 2048 суррогатов - 66 нехарактерных символов
Обратите внимание, что UTF-8 и UTF-32 теоретически могут кодировать намного больше, чем 17 плоскостей, но диапазон ограничен на основании ограничений кодировки UTF-16 .
109,384 кодовые точки фактически назначаются в Unicode 6.0 .
Я также не понимаю, почему байты продолжения имеют ограничения, хотя начальный байт этого символа очищает, как долго это должно быть.
Цель этого ограничения в UTF-8 состоит в том, чтобы сделать кодировку самосинхронизирующейся .
В качестве контрпримера рассмотрим китайскую кодировку GB18030. Там буква ß
представлена как последовательность байтов 81 30 89 38
, которая содержит кодировку цифр 0
и 8
. Таким образом, если у вас есть функция поиска строки, не предназначенная для этой специфической для кодирования причуды, то поиск цифры 8
найдет ложный положительный знак в пределах буквы ß
.
В UTF-8 этого не может быть, потому что неперекрытие между ведущими байтами и байтами следа гарантирует, что кодирование более короткого символа никогда не может происходить в кодировке более длинного символа.