16-битное кодирование, в котором все биты сопоставлены с некоторым значением

У UTF-32 последние биты обнулены. Насколько я понимаю, UTF-16 тоже не использует все свои биты.

Существует ли 16-битное кодирование, в котором все комбинации битов отображаются в какое-то значение, предпочтительно в подмножество UTF, например ASCII для 7-бит?

1 ответ

Решение

UTF-32 обнуляет последние биты

Это может быть не правильно, в зависимости от того, как вы считаете. Обычно мы считаем слева, поэтому старшие (т.е. первые) биты UTF-32 будут равны нулю

Насколько я понимаю, UTF-16 тоже не использует все свои биты

Это тоже не правильно. UTF-16 использует все свои биты. Просто диапазон [0xD800—0xDFFF] зарезервирован для суррогатных пар UTF-16, поэтому этим значениям никогда не будет назначен какой-либо символ и они никогда не появятся в UTF-32. Если вам нужно кодировать символы вне BMP с помощью UTF-16, то эти значения будут использоваться

На самом деле Юникод был ограничен U + 10FFFF только из-за UTF-16, хотя сами UTF-8 и UTF-32 способны представлять до U+7FFFFFFF и U+FFFFFFFF соответственно. Использование суррогатной пары делает невозможным кодирование значений больше 0x10FFFF в UTF-16

См. Почему Unicode ограничен до 0x10FFFF?

Существует ли 16-битное кодирование, в котором все комбинации битов отображаются на какое-то значение, предпочтительно на подмножество UTF, например ASCII для 7 бит?

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

До существования UTF-16 Unicode был фиксированным 16-битным набором символов, закодированным с помощью UCS-2. Так что UCS-2 может быть ближайшим к вам, который кодирует только символы в BMP. Другие фиксированные 16-битные не-Unicode-кодировки также имеют кодировку, которая отображает все битовые комбинации на некоторые символы

Однако зачем вам это? UCS-2 давно устарела. Некоторые старые инструменты и менее опытные программисты все еще подразумевают, что Unicode всегда 16-битный, как тот, который является правильным и нарушит современную обработку текста

Также обратите внимание, что не все значения ниже 0xFFFF назначены, поэтому никакое кодирование не может сопоставить каждое 16-битное значение с кодовой точкой Unicode

дальнейшее чтение

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