Сколько символов можно сопоставить с Unicode? - программирование
Подтвердить что ты не робот

Сколько символов можно сопоставить с Unicode?

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

4b9b3361

Ответ 1

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

1,111,998: 17 самолетов и раз; 65 536 символов на самолет - 2048 суррогатов - 66 нехарактеров

Обратите внимание, что UTF-8 и UTF-32 теоретически могут кодировать гораздо больше, чем 17 самолетов, но диапазон ограничен на основе ограничений кодировки UTF-16.

109,384 кодовые точки фактически назначены в Unicode 6.0.

Я также не понимаю, почему байты продолжения имеют ограничения, хотя начальный байт этого char очищает, как долго он должен быть.

Цель этого ограничения в UTF-8 состоит в том, чтобы сделать кодировку self-synchronizing.

Для контрпримера рассмотрите китайскую кодировку GB18030. Там буква ß представляется как последовательность байтов 81 30 89 38, которая содержит кодировку цифр 0 и 8. Поэтому, если у вас есть функция поиска по строкам, не предназначенная для этой специфики для кодирования, тогда поиск цифры 8 найдет ложное положительное значение в письме ß.

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

Ответ 2

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

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

Ответ 3

Юникод поддерживает 1112114 кодовых пункта. Существует 2048 суррогатная кодовая точка, дающая 1,110,066 скалярных значений. Из них 66 нехарактеров, что приводит к 1 110 000 возможных кодированных символов (если только я не сделал ошибку вычисления).

Ответ 4

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

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

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

Ответ 5

Unicode не является кодировкой, является символьным сопоставлением. Согласно Wikipedia Unicode в настоящее время содержит 109242 различных символов.

Ответ 6

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