Unicode исторически был 16-битным кодом и набором символов (в самых первых версиях).Это также произошло, когда UCS-2 был создан как кодировка, где каждый символ из универсального набора символов представлял собой 2-байтовую единицу.
Быстро стало ясно (также из-за некоторых изменений в объеме проекта), что 16битов и, следовательно, 65536 символов слишком мало для работы, и Unicode был расширен до 21 бита, организованных в 17 плоскостей , из которых первые 65536 символов образуют 0-й, Базовую многоязычную плоскость (BMP).
В то же время 2048 кодовых точек в BMP были выделены как так называемые высокие и низкие суррогаты.Два из которых будут представлять персонажа в другой плоскости.Это включило UTF-16, где каждый код единица по-прежнему имеет длину в два байта, а одна или две единицы кода (в последнем случае путем объединения суррогата высокого и низкого уровня) будут представлять один код точка .Кроме того, было объявлено, что эти суррогаты не могут появляться в изоляции или в неправильном порядке.Суррогатные символы - это, в основном, странность (они образуют самый большой блок не-символов в Юникоде), но технически они были наиболее чистым способом разрешить путь от 16-битного до 21-битного Юникода.
Что бы вы ни слышали илидумаю, Unicode не был 16-битным кодом в течение самого долгого времени в своей истории, и в настоящее время нет ничего, что требовало бы 16-битного кодирования.Однако:
- Системы и среды, которые были очень ранними последователями Unicode, первоначально использовали UCS-2, просто потому, что это был простой способ поддержки всех символов из нового набора символов.Те перешли на UTF-16.Windows, Java и .NET (благодаря своему наследию Windows) являются примерами этого.
- В большинстве других мест в настоящее время используется UTF-8, который также является доминирующей кодировкой в Интернете (согласно Google).UTF-8 не нуждается в суррогатных парах, но вместо этого использует другую схему, где кодовые точки представлены одной (ASCII), двумя, тремя или четырьмя кодовыми единицами (в зависимости от кодовой точки).
- Существует такжеUTF-32, идентичный UCS-4, использует четыре байта на символ.Это в основном используется для некоторых внутренних процессов программного обеспечения, где каждая кодовая точка должна иметь одинаковую длину.Он редко используется при хранении или обмене.