Открыть сервис

Unicode

Unicode — это промышленный стандарт кодирования символов, включающий знаки практически всех письменных систем мира. Он обеспечивает однозначное числовое представление каждого символа (буквы, цифры, иероглифа, знака препинания, эмодзи) независимо от платформы, программы или языка, и является основой для обмена текстовой информацией в современных компьютерных системах и сети Интернет.

История

Предпосылки создания

До появления Unicode в компьютерной индустрии существовало множество несовместимых систем кодирования. Наиболее распространённым был стандарт ASCII (American Standard Code for Information Interchange), использующий 7 бит для кодирования 128 символов (латиница, цифры, знаки препинания). Однако ASCII не мог поддерживать языки с нелатинской письменностью, такие как русский, греческий, арабский или китайский. Для них разрабатывались отдельные кодовые страницы (например, CP1251 для кириллицы, ISO 8859-5), что приводило к путанице: один и тот же байт мог обозначать разные символы в разных системах. Это делало невозможным корректное отображение текста, содержащего символы из нескольких алфавитов одновременно (например, русскоязычный текст с французскими заимствованиями).

Другой проблемой была крайне малая ёмкость 8-битных кодировок (до 256 символов), недостаточная для представления сложных систем письма, таких как китайские иероглифы (ханьцзы), японская кана и кандзи, а также корейский хангыль.

Разработка и первые версии

Попытки создать универсальный стандарт предпринимались в конце 1980-х годов. В 1987 году сотрудники корпораций Xerox (Джо Беккер) и Apple (Ли Коллинз, Марк Дэвис) начали совместную работу над проектом «Unicode». В 1991 году был основан «Консорциум Unicode» (Unicode Consortium) — некоммерческая организация, занимающаяся развитием и продвижением стандарта. Первая версия стандарта (Unicode 1.0) была опубликована в октябре 1991 года. Она включала 7161 символ, в основном из распространённых алфавитов и систем письма.

Ключевым принципом изначально была идея фиксированной ширины (2 байта на символ, что давало 65 536 возможных значений). Однако вскоре стало ясно, что это пространство недостаточно для охвата всех исторических и современных письменностей.

Переход к 32-битному пространству и дальнейшее развитие

Понимая ограниченность 16-битного кодирования, разработчики расширили пространство до 1 114 112 кодовых позиций (21 бит). Эта область называется «кодовым пространством Unicode» (Unicode codespace). Вторая версия (Unicode 2.0, 1996 год) была первой, использующей суррогатные пары для адресации символов за пределами первоначальной многоязычной плоскости (BMP). Это позволило кодировать сотни тысяч различных знаков. Последующие версии (3.0, 4.0, 5.0 и так далее) последовательно добавляли новые блоки символов: поддержку исторических письменностей (египетские иероглифы, клинопись, руны), а также математических и музыкальных знаков, эмодзи и символов для специальных целей. На сегодняшний день (Unicode 16.0, 2024 год) стандарт включает более 150 000 символов.

Статус на территории РФ

Сам стандарт Unicode не является объектом правового регулирования, связанного с экстремизмом или терроризмом. Он свободно применяется во всех информационных системах на территории Российской Федерации. Никаких ограничений на использование стандарта или самого термина в контексте законодательства РФ не вводилось.

Структура и основные принципы

Кодовое пространство

Основой Unicode является кодовая точка (code point) — целое число в диапазоне от 0 до 0x10FFFF (десятичных 1 114 111). Каждому символу или знаку присвоена уникальная кодовая точка. Например:

Плоскости

Кодовое пространство разбито на 17 плоскостей (planes) по 65 536 кодовых точек в каждой (диапазоны U+xxxxx):

Символы и глифы

Unicode задаёт символ (character) — абстрактное понятие, а его визуальное отображение — глиф (glyph) — определяется шрифтом. Один символ может отображаться разными глифами (например, курсив «а» и прямой шрифт «а» — это один символ U+0061).

Классификация

По типу

Unicode разделяет символы на несколько категорий:

  1. Буквы (L): L (буква), Ll (строчная), Lu (прописная), Lt (заглавная, первая буква заголовка), Lm (модифицирующая), Lo (буква, не относящаяся к двум регистрам — например, иероглиф).
  2. Цифры (N): Nd (десятичная цифра), Nl (буквенная цифра — например, римские), No (цифра, не являющаяся десятичной — например, «один» на коптском).
  3. Знаки пунктуации (P): Pc (соединитель — подчёркивание), Pd (тире), Ps/Pe (открывающая/закрывающая скобка), Pi/Pf (открывающие/закрывающие кавычки), Po (прочие знаки — точка, запятая).
  4. Символы (S): Sm (математические операторы), Sc (валютные знаки), Sk (модифицирующие символы — например, надстрочный знак циркумфлекс), So (прочие — эмодзи, знаки нотации).
  5. Разделители (Z): Zs (пробел), Zl (разрыв строки — символы CR, LF, разделители строк Юникода), Zp (разрыв абзаца).
  6. Управляющие (C): Cc (управляющие символы ASCII — табуляция, перевод строки), Cf (форматирующие — невидимые для отображения, например, мягкий перенос, BOM), Cn (не назначенные), Co (частной зоны), Cs (суррогатные — используются в UTF-16 для представления символов вне BMP).

По блокам

Все кодовые точки сгруппированы в тематические блоки (blocks). Примеры: «Basic Latin» (U+0020-U+007E), «Cyrillic» (U+0400-U+04FF), «Arabic Presentation Forms-A» (U+FB50-U+FDFF). Блоки могут содержать как символы одного алфавита, так и смешанные.

Формы представления и кодирование

Unicode — это не метод записи на компьютере. Существуют различные формы кодирования (encoding forms), которые определяют, как кодовые точки преобразуются в последовательность байтов:

Выбор UTF-8 определяется совместимостью с ASCII и эффективностью для большинства языков, особенно английского.

Применение и значение

Роль в Интернете

Unicode является стандартом де-факто для веб-контента. Протокол HTTP и язык HTML требуют явного указания кодировки (например, <meta charset="UTF-8">). Без Unicode международный веб был бы невозможен — сайты могли бы отображать текст только на одном языке.

Информационные системы

Операционные системы (Windows, macOS, Linux), базы данных (PostgreSQL, MySQL), языки программирования (Python 3, Java, C#, JavaScript) и прикладное программное обеспечение (текстовые редакторы, браузеры) используют Unicode для внутреннего представления строк. Это обеспечивает переносимость данных между разными системами.

Эмодзи и специальные символы

Unicode включает тысячи эмодзи (смайлики, жесты, предметы, животные и так далее), которые добавляются ежегодными выпусками стандарта (версии Unicode Emoji). Это превратило их в стандартизированное средство невербального общения в мессенджерах и соцсетях. Также кодируются математические символы, стрелки, геометрические фигуры, символы валют (рубль, доллар, евро, йена и др.), знаки авторского права и торговых марок.

Интересные факты

  1. Суррогатные пары. Для экономии места в UTF-16 символы вне BMP (например, большинство эмодзи) кодируются двумя 16-битными единицами — «суррогатной парой». Это одна из причин, по которой в ранних текстовых редакторах могли некорректно отображаться эмодзи — считалось, что каждый символ занимает 2 байта.
  2. Диакритика. Один символ с диакритикой (например, «ё») может быть представлен как отдельным символом (U+00EB), так и комбинацией основной буквы (и, U+0438) с модификатором (двоеточие над гласной, U+0308). Это свойство называется «составное представление» (canonical decomposition).
  3. Иероглифы. Для китайских иероглифов существует проблема «Han Unification»: Unicode объединяет похожие иероглифы из разных языков (китайский, японский, корейский, вьетнамский) в один символ, если различие лишь в стиле начертания. Это вызвало критику со стороны японских и корейских лингвистов, считающих такое решение неточным.
  4. Самый большой блок. Крупнейший блок Unicode — «CJK Unified Ideographs» (около 20 000 символов). Он не помещается в одну плоскость, поэтому расширения (B-H) занимают частично 2-ю плоскость (SIP).

Критика

Несмотря на огромную популярность, Unicode подвергается критике за несколько аспектов:

См. также

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →