Юникод

Материал из Циклопедии
(перенаправлено с «Unicode»)
Перейти к навигации Перейти к поиску
New Unicode logo.svg
Unicode: как это работает // rwpod (30 апр. 2017 г.) (Что такое Unicode, UTF-8 и как это работает) [11:11]

Юникод (англ. Unicode; иногда также Уникод) — информационный стандарт для цифрового кодирования текстов.

Включает в себя большинство символов, используемых употребляемыми нынче и в истории знаковыми системами человечества. Юникод включает также символы, специфичные для некоторых формальных языков (компьютерного и научного применения). Стандарт не является раз и навсегда заданным, а постепенно дополняется.

Разрабатывается организацией «Консорциум Юникода».

Теоретические основы[править]

Стандарт состоит из нескольких взаимосвязанных частей, решающих различные проблемы, поставленные его широкими претензиями.

  • Кодовое пространство Юникода, назначение блоков для разных письменностей и кодов — конкретным символам. Другие названия этой части стандарта: ISO/IEC 10646 и Universal Character Set.
  • Формы представления Юникода, то есть конкретные кодировки (в виде последовательности октетов и т. п.) такие, как UTF-8 и UTF-16.
  • БД свойств символов.
  • Алгоритмы для нормализации, лексикографического упорядочения, вывода (rendering) сложных письменностей, а также поддержки двух направлений письма (направо и налево).

Консорциум также предоставляет списки символов (включая их изображения) в формате PDF.[1]

В основе лежит представление текста как последовательности нумерованных (абстрактных) символов. При этом Юникод не ставит своей задачей однозначность такого представления; напротив, некоторые различные представления объявляются эквивалентными. Причинами терпимости к неоднозначности являются разные способы работы с текстом разного ПО, а также наличие в стандарте введённых для «совместимости» (compatibility) символов, предназначенных для импорта текста из исторических компьютерных и телекоммуникационных кодировок.

Вопросы выбора языкового варианта символов (букв): гарнитуры и т. д. — были объявлены лежащими за пределами применимости стандарта. Соблюдается это не очень строго — блок так называемых Mathematical Alphanumeric Symbols содержит курсивные и полужирные варианты букв латинского алфавита.

Кодовое пространство Юникода[править]

Кодовое пространство Юникода содержит 17 × 216 = 1 114 112 позиций, обозначаемых обычно шестнадцатеричными номерами от 0x0000 до 0x10FFFF включительно. Версия стандарта 13.0[обновить данные] назначает коды 143 859 символам, при этом также большое количество позиций зарезервировано (либо могут использоваться лишь в особых контекстах, либо намеренно сделаны недоступными при обмене текстами в Юникоде). Количество назначенных символов настолько велико, что одного (или даже двух) шрифтовых файлов в формате TrueType уже недостаточно для поддержки их всех.

Наиболее часто используются коды до 0xFFFF, составляющие так называемую BMP (Basic Multilingual Plane), или «кодовую плоскость» номер 0. Большинство современных человеческих языков не требуют выхода за пределы BMP; китайский и японский поддерживаются «плоскостью 0» лишь частично. Общепринятое обозначение лежащих в ней кодовых позиций — U+hhhh, где hhhh — четыре шестнадцатеричных цифры.

Из прочих «кодовых плоскостей» номер 1 (0x10000-0x1FFFF) отведена под исторические или экзотические технические и научные символы, документированные но малоиспользуемые письменности, а также эмодзи. В плоскостях 2 и 3 (0x20000-0x3FFFF) располагаются малоиспользуемые китайские символы. Плоскости 4, 5, 6, 7, 8, 9, 10, 11, 12 и 13 (0x40000-0xDFFFF) пока свободны, номер 14 (0xE0000-0xEFFFF) содержит некоторое количество непечатных символов, а две последних «плоскости» (0xF0000-0x10FFFF) зарезервированы под частное использование (Private Use Area).

Плоскости 1 и 2 уже содержат значительное количество символов. Но при этом доступ к символам, лежащих вне BMP, может иметь дефекты по причинам их отсутствия в шрифтах, а также в случае приложений, ограничивающих коды до шестнадцати двоичных разрядов (в т. ч. из-за неправильного чтения UTF-16).

«Плоскости» разбиты на (намного более мелкие) «блоки», размер которых предписан[2] быть кратным 16. Символы одной системы письма, как правило, располагаются в небольшом числе блоков, а не разбросаны по кодовому пространству в беспорядке.

Свойства символов Юникода[править]

Стандарт «Юникод» назначает каждой кодовой позиции ряд свойств, формирующих машиночитаемую базу данных.[3] Важнейшим из свойств является так называемая Общая Категория (General Category), представляющая собой классификацию символов на классы и подклассы. Значения Общей Категории кодируются двумя английскими буквами, где первая (прописная) указывает на категорию верхнего уровня, а вторая — задаёт подкатегорию. Список категорий приводится далее.

  • L — знак письма (Letter). Каждый знак назначен в одну из 154 включённых в Юникод систем письма.
  • M — Mark.
  • N — знак числа (Number). Включают в себя десятичные цифры (Nd), буквоподобные знаки вроде римских цифр (Nl), и прочие (No), включающие такие дроби, как ½, и цифры в верхней и нижней позициях.
  • P — знак препинания (Punctuation).
  • S — прочие печатные символы (Symbol). Включают в себя математические символы (Sm).
  • Z — разделитель (Separator).
  • C — управляющие символы, зарезервированные позиции и т. п. (Other).

Версии[править]

Версия 1.0.0 вышла в 1991 году и не содержала поддержки китайского и японского языков, что было отчасти исправлено в следующем году версией 1.0.1. После трёхлетнего перерыва в выпуске, версия 2.0 в 1996 году ввела суррогатные пары UTF-16, позволяющие (при 16-битном представлении данных) выйти за пределы 216 кодовых позиций. Началось наполнение символами дополнительных «плоскостей». Версия 3.0 в 2000 году, помимо поддержки новых письменностей, «узаконила» UTF-8.

Формирование затейливых механизмов форматирования текста было практически завершено к версии 6.3 (выпущенной в сентябре 2013 года), после чего Юникод расширяется лишь путём включения экзотических письменностей и назначения «забытым» (или новым) символам кодовых позиций. Последней версией стандарта (на конец 2021 года) является 14.0.

Поддержка ПО и операционными системами[править]

В Microsoft Windows 16-разрядная поддержка кодового пространства Юникода была встроена в ядро Windows NT с самого начала. Устаревшие семейства Windows получили дополнения, позволяющие приложениям обращаться к юникодовским API. По состоянию на конец 2010-х годов, практически всё ПО от Майкрософта ориентировано на работу с текстами в Юникоде. С 2019 года предпочтительной кодировкой текстовых файлов становится UTF-8, много лет ранее ставшая de facto стандартом для прочих операционных систем.

Бессмысленный текст, возникающий при открытии текстового файла, содержащего лишь символы ASCII

Известный баг Windows XP «Bush hid the facts» не был, как таковой, ошибкой в поддержке Юникода операционной системой. Он был обусловлен слепым доверием приложения «Notepad» (Блокнот) к функции IsTextUnicode, имеющей навязчивое состояние наблюдения UTF-16 там, где его нет.

Linux (ядро) поддерживает ISO/IEC 10646, что актуально, главным образом, для работы с некоторыми файловыми системами, а также текстовыми консолями. Некоторая мера понимания ISO/IEC 10646 ядром ничего не говорит о способности приложений работать с юникодовскими текстами, определяемой лишь разработчиками приложений. По состоянию на конец 2010-х годов, написано большое количество свободных библиотек, помогающих программисту совладать со сложными проблемами представления многоязычных текстов в виде, пригодном для пользователя. Основанная на Linux система Android изначально была разработана с учётом поддержки Юникода.

Ляпы[править]

Известен ряд явных опечаток в официальных (английских) названиях символов, что вызывает особую досаду ввиду того, что эти названия не подлежат изменению никогда (даже при выпуске новой версии стандарта). Помимо этого, названия первых 128 символов были некритически списаны со стандарта ISO 646, откуда Юникод заимствовал, таким образом, некоторые нелепости.

См. также[править]

Источники[править]

Кодировки символов
Основы Алфавиттекстнабор символовконверсия
Исторические кодировки Докомп.: семафорная (Макарова)МорзеБодоМТК-2
Комп.: 6-битнаяУППRADIX-50EBCDICДКОИ-8 ) • КОИ-7ISO 646
современное
8-битное
представление
символы ASCIIуправляющиепечатные )
8-битные код.стр. ISO 8859 • кириллица (КОИ-8ГОСТ 19768-87MacCyrillic)
Windows 12501251 (кир.)1252125312541255125612571258WGL4
IBM & DOS 437850852855866 «альт.»МИКНИИ ЭВМ
Многобайтные Традиционные DBCSGB 2312 ) • HTML
Unicode UTFсписок символов (кириллица • латиница)
Связанные темы интерфейс пользователяраскладка клавиатурылокальперевод строкикракозябрытранслитнестандартные шрифты
 
1
по
9999
10000
по
19999
20000+

См. также: Список статей, начинающихся с «ISO»