Что такое Unicode: полное руководство, применение и кодировки

Последнее обновление: 20 августа 2025
Автор: TecnoDigital
  • Unicode присваивает каждому символу уникальную кодовую точку и синхронизирует ее набор со стандартом ISO/IEC 10646.
  • UTF-8, UTF-16 и UTF-32 кодируют одни и те же символы и допускают преобразование без потерь.
  • Свойства нормализации, Bidi и UCD обеспечивают единообразное сравнение, упорядочивание и рендеринг.
  • Использование Unicode (предпочтительно UTF-8 в Интернете) предотвращает искажение данных и облегчает интернационализацию.

Общая иллюстрация о Unicode

Юникод — это общий язык, на котором говорят компьютеры при обработке текста : он присваивает уникальный номер каждому символу практически из любой системы письма, что позволяет беспрепятственно хранить, обрабатывать и передавать текст между платформами и странами.

Этот стандарт возник для преодоления ограничений старых наборов символов ( ASCII , кодовых страниц, EBCDIC и т. д.), которые были несовершенны или несовместимы друг с другом, и сегодня он синхронизирован с ISO/IEC 10646, поддерживает алгоритмы (например, двунаправленный) и определяет свойства и правила нормализации, чтобы все работало согласованно.

Что такое Unicode и почему он так важен?

Unicode — это универсальный и постоянно развивающийся стандарт кодировки символов , описывающий каждый символ именем, кодовой точкой и набором свойств (письменность, категория, направление, регистр и т. д.). Технический комитет Unicode (UTC) в рамках консорциума Unicode поддерживает его в соответствии со стандартом ISO/IEC 10646.

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

Символы, глифы и кодовые точки

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

Обычно кодовая точка обозначается как U+XXXX в шестнадцатеричной системе . Иллюстративные примеры из проанализированного материала: строчная буква «l» — U+006C, предварительно составленная строчная буква «ü» — U+00FC, «é» — U+00E9, а греческая бета: заглавная — U+0392, строчная — U+03B2 (в некоторых текстах «β» обозначается как U+0392, но этот код соответствует заглавной букве «Β»).

Кодовое пространство Unicode содержит 1 114 112 возможных позиций (до U+10FFFF) , организованных для охвата и классификации всех систем письма и символов, с десятками тысяч эффективных и постоянно растущих назначений в каждой версии.

Планы, площади и кварталы

В Unicode символьное пространство разделено на 17 плоскостей, каждая из которых содержит до 65 536 кодовых точек . Такая организация позволяет легко группировать связанные шрифты и символы и быстро находить то, что вам нужно.

Наиболее важные плоскости : базовая многоязычная плоскость (БМП, плоскость 0) объединяет почти все современные алфавиты и множество символов; дополнительная многоязычная плоскость (ПМП, плоскость 1) хранит исторические письмена и технические символы (например, музыкальные и математические); дополнительная идеографическая плоскость (ПИ, плоскость 2) расширяет идеограммы китайского, японского и корейского языков; плоскость 14 (ПСП) включает специальные метки; а плоскости 15 и 16 предназначены для частного использования.

Блоки и области : карты неформально подразделяются на области, а формально — на смежные блоки. Блоки используются для систематизации и документирования символов, хотя они не всегда соответствуют значимым языковым группам.

  15 преимуществ удаленной работы для вашей работы и личного благополучия

Идеограммы CJK и проект Unihan

Восточноазиатские (ханьские) иероглифы унифицированы в Unicode, хотя и имеют стилистические различия в зависимости от региона , но все они обозначают один и тот же абстрактный символ. Управление ими осуществляется Группой идеографических докладчиков (IRG), входящей в состав ISO/IEC JTC1/SC2/WG2, в которую входят представители Китая, Японии, Кореи, Вьетнама, Гонконга, Макао, Сингапура, США и других стран.

База данных Unihan объединяет вспомогательную информацию (чтения, значения, эквиваленты), необходимую для работы с этими иероглифами на разных языках и в соответствии с историческими или корпоративными стандартами.

Основные блоки и расширения китайского, японского и корейского языков :

  • Унифицированные идеограммы CJK (BMP, U+4E00–U+9FFF): 20.992 XNUMX общеупотребимых символа.
  • Расширение А (BMP, U+3400–U+4DBF): 6.592 менее частых идеограммы.
  • Расширения B–H: в SMP/SIP/TIP их в сумме получается еще десятки тысяч (B: U+20000–U+2A6DF, 42.720 2; C: U+700A2–U+73B4.154F, 2 740; D: U+2B81–U+222B2F, 820; E: U+2B5.762–U+2CEAF, 0 2; F: U+7.473CEB30000–U+3134EBEF, 4.939 31350; G: U+323–U+4.192F, XNUMX XNUMX;
  • Другие связанные блоки CJK: Радикалы Канси (U+2F00–U+2FDF), Символы и знаки препинания CJK (U+3000–U+303F), Совместимость и форматы совместимости, Дополнение к идеограммам совместимости и т. д.

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

Формы кодирования: UTF-8, UTF-16 и UTF-32

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

UTF-8 — это формат кодировки переменной длины, ориентированный на байты, совместимый с ASCII в диапазоне U+0000–U+007F в одном байте. Современный стандарт использует от 1 до 4 байтов на символ; в некоторых старых текстах упоминается от 1 до 6, но в современном Unicode это от 1 до 4. Это доминирующий формат в интернете.

Кодировка UTF-16 использует 16-битные блоки.

(одна или две кодовые единицы на символ) : большинство символов BMP помещаются в одну единицу; дополнительные символы используют суррогатные пары в диапазоне U+D800–U+DFFF.

UTF-32 имеет фиксированную длину: 4 байта на символ, простая, но ресурсоемкая кодировка; полезна, когда важна прямая индексация символов, а память не является проблемой.

Как распределяются биты в UTF-8

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

Диапазон Юникода Битовая модель Б
U+0000..U+007F 0ххххххх 1
U+0080..U+07FF 110yyyyy 10xxxxxx 2
U+0800..U+FFFF 1110zzzz 10yyyyy 10xxxxxx 3
U+010000..U+10FFFF 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx 4

Ключевое преимущество UTF-8 заключается в том, что он позволяет избежать проблем с порядком байтов (эндиансом) и обеспечивает высокоэффективную обработку текстовых потоков, а также обратно совместим с ASCII.

Схемы кодирования, порядок байтов и BOM

Помимо UTF-форматов, Unicode описывает схемы сериализации , которые определяют, как байты передаются между системами с разным порядком байтов и как передаются такие параметры, как порядок байтов.

  • UTF-8: порядок байтов не применяется. Это может быть Порядок следования байтов (BOM) в качестве подсказки, хотя по умолчанию это не требуется и не рекомендуется.
  • UTF-16: варианты BE/LE (big/little-endian) и необязательный BOM (если отсутствует и не определено протоколом, предполагается big-endian).
  • UTF-32: Варианты BE/LE с аналогичными правилами; BOM разрешен в качестве знака заказа.
  Компьютерные компоненты: полное руководство по аппаратному обеспечению

Помимо GB18030 (китайский эквивалент UTF-8 с поддержкой упрощенного и традиционного китайского языков), существуют также специфические варианты , такие как UTF-16BE/UTF-16LE и UTF-32BE/UTF-32LE (по общепринятой практике без BOM), а также другие кодировки, обеспечивающие историческую совместимость, например, UTF-7 или UTF-EBCDIC.

Нормализация, композиция и эквивалентности

Многие символы могут быть представлены как в виде предварительно составленных символов, так и в виде последовательностей базовых символов + комбинаторных знаков . Классические примеры из пересмотренного материала: предварительно составленный символ «Ä» — это U+00C4, а его разложенная форма — это «A» (U+0041) + диакритический знак (U+0308). Вьетнамский символ «ỗ» может быть представлен как «o» (U+006F) + циркумфлекс (U+0302) + тильда (U+0303).

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

Двунаправленный алгоритм и специальные символы

Для письменностей, идущих справа налево, таких как арабский или иврит, Unicode использует стандартизированный и постоянно совершенствующийся двунаправленный алгоритм (Bidi) (например, изменения в версии 6.3), благодаря чему смешанные тексты с латинскими и арабскими буквами отображаются в правильном визуальном порядке.

Классы кодовых точек, которые необходимо знать в соответствии с полученным материалом: графические символы (буквы, знаки, символы), форматирование (невидимые символы, влияющие на обработку: U+2028 перенос строки, U+2029 разрыв абзаца, U+00A0 жесткий пробел), унаследованные управляющие коды для совместимости (диапазоны U+0000–U+001F, U+007F, U+0080–U+009F), частное использование, зарезервированные позиции, заменители (U+D800–U+DFFF для UTF-16) и несимвольные символы (U+FFFE, U+FFFF в каждой плоскости).

Unicode, ISO/IEC 10646 и другие стандарты (ASCII, ANSI, кодовые страницы)

Кодировка Unicode синхронизирована со стандартом ISO/IEC 10646 (UCS) и сохраняет сопоставления с предыдущими стандартами (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643 и др.), а также резервирует места для личного использования производителями.

ASCII против Unicode : ASCII — это 7-битный набор символов , содержащий 128 символов, достаточный для базового английского языка, но недостаточный для языков с диакритическими знаками, идеограммами или эмодзи . Unicode охватывает более 140 000 символов и продолжает расти, используя 8/16/32-битную кодировку в соответствии с форматом UTF-12.

ANSI и кодовые страницы : «ANSI» обычно относится к ограниченным и взаимонесовместимым 8-битным кодовым страницам Windows. Компьютер, работающий под управлением OEM-Latin II и открывающий текст в кириллице IBM EBCDIC, увидит некорректные символы. Unicode решает эту проблему с помощью единого набора символов и преобразования без потерь между своими собственными формами.

Реализация на системах (Windows, Solaris) и конвертация

В Windows для современных API используется кодировка UTF-16 , а также доступны функции MultiByteToWideChar и WideCharToMultiByte для преобразования между кодировками Unicode и кодовыми страницами (SBCS/DBCS/MBCS). Если преобразование в кодовую страницу неизбежно, может произойти потеря данных, если не удается отобразить все символы.

Новые приложения для Windows должны использовать UTF-16 внутри себя , оставляя преобразование на периферии (ввод-вывод, протоколы), чтобы минимизировать искажения. Тем не менее, Windows сохраняет совместимость с кодовыми страницами, когда это неизбежно.

Согласно пересмотренной документации, Oracle Solaris 11 поддерживает Unicode 6.0 и ISO/IEC 10646:2011 на системном уровне, используя UTF-8 в качестве формата по умолчанию в своих наборах параметров, что позволяет избежать проблем с порядком байтов и прозрачно сохраняет ASCII.

Unicode на практике: веб, документы и программирование

В интернете принято отображать и хранить контент в кодировке UTF-8 . В HTML для обеспечения совместимости следует объявить '<meta charset="UTF-8">' и использовать шестнадцатеричные числовые сущности при необходимости (например, евро '&#x20AC;').

  Полное пошаговое руководство по сборке компьютера

В Word вы можете легко вставлять символы Unicode, установив курсор, перейдя в меню «Вставка» > «Символ» или набрав код и нажав Alt+X; это преобразует значение в соответствующий символ в соответствии со стандартной процедурой. См. также список Alt-кодов для вставки символов с клавиатуры.

В языках программирования : в Python 3 строки уже используют кодировку Unicode; в Java и C# можно использовать экранирующие символы '\uXXXX'; в HTML — '&#xXXXX;'. Важно, чтобы при редактировании, компиляции и передаче использовалась одна и та же кодировка во избежание ошибок.

Копирование и вставка символов работают, если вся строка написана в кодировке Unicode . Если же отдельные части строки используют другую кодировку, могут появиться вопросительные знаки, квадраты или другие странные символы.

База данных персонажей (UCD), свойства и категории

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

Благодаря этим свойствам различные компоненты и алгоритмы (такие как сортировка, сегментация слов или преобразование в верхний/нижний регистр) могут работать согласованно с одними и теми же данными.

Версии и расширения стандарта: основные моменты

С каждой новой версией Unicode расширяется , включая новые шрифты, символы и эмодзи. Ключевые этапы включают версию 1.0 в 1991 году с 7.161 символом, а также последующие расширения, добавившие тысячи новых символов, идеограмм, эмодзи и шрифтов.

Например, в 2022 году в версию 15.0 было добавлено 4.192 дополнительных иероглифа китайского, итальянского и корейского языков, а также другие элементы, в результате чего общее количество символов достигло приблизительно 149 186.

Инструменты для изучения таблицы Unicode

Существуют бесплатные утилиты для поиска и анализа персонажей : Unibook Character Browser, SYMBL и Branah.com позволяют запрашивать свойства, имена и блоки персонажей, что упрощает разработчикам и создателям контента быстрый поиск необходимой информации.

Варианты использования: формы адресов, интернационализация и бизнес

Предоставление пользователям возможности вводить адреса на своем языке и с использованием своей письменности помогает уменьшить количество ошибок и улучшить пользовательский опыт. Кроме того, совместимость с Unicode предотвращает проблемы преобразования между различными системами, обеспечивая целостность текста на протяжении всей цифровой цепочки.

По этой причине Unicode является основополагающим элементом, обеспечивающим неизменность текста во всей цифровой инфраструктуре , от веб-форм до систем баз данных и печатных документов, независимо от того, используете ли вы в одном предложении символ «ñ», арабский, китайский языки или эмодзи.

Двоичная нумерация
Связанная статья:
Двоичная нумерация: секретный язык компьютеров