Сколько символов можно сопоставить с помощью Юникода?

Я прошу подсчет всех возможных действительных комбинаций в Юникоде с объяснением. Я знаю, что символ может быть закодирован как 1,2,3 или 4 байта. Я также не понимаю, почему байты продолжения имеют ограничения, хотя начальный байт этого символа очищает, как долго это должно быть.

6 ответов

Решение

Я прошу подсчет всех возможных действительных комбинаций в Юникоде с объяснением.

1111 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 этого не может быть, потому что неперекрытие между ведущими байтами и байтами следа гарантирует, что кодирование более короткого символа никогда не может происходить в кодировке более длинного символа.

Юникод допускает 17 плоскостей, каждый из 65 536 возможных символов (или "кодовых точек"). Это дает в общей сложности 1,114,112 возможных символов. В настоящее время только около 10% этого пространства было выделено.

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

Юникод поддерживает 1,114,112 кодовых точек. Имеется 2048 суррогатных кодовых точек, дающих 1,112,064 скалярных значений. Из них 66 не-символов, что приводит к 1111 998 возможным кодированным символам (если только я не допустил ошибку в вычислениях).

Юникод это не кодировка, это отображение символов. Согласно Википедии Unicode в настоящее время содержит 109242 различных символа.

Чтобы дать метафорически точный ответ, all of them,

Байты продолжения в кодировках UTF-8 позволяют выполнять повторную синхронизацию кодированного потока октетов перед лицом "линейного шума". Кодировщик просто нуждается в сканировании вперед для байта, который не имеет значения между 0x80 и 0xBF, чтобы знать, что следующий байт является началом новой символьной точки.

Теоретически, используемые сегодня кодировки позволяют выражать символы, чьи номера символов Unicode имеют длину до 31 бита. На практике это кодирование фактически реализуется в таких сервисах, как Twitter, где твит с максимальной длиной может кодировать данные объемом до 4340 бит. (140 символов [действительные и недействительные], каждый раз по 31 бит).

Unicode имеет шестнадцатеричное значение 110000, что составляет 1114112

Другие вопросы по тегам