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

ISO/IEC 10646

ISO/IEC 10646 — это международный стандарт, определяющий универсальный набор символов (Universal Coded Character Set, UCS), который устанавливает однозначное соответствие между каждым письменным знаком (буквой, цифрой, иероглифом, символом) систем письменностей мира и уникальным целым числом — кодовой точкой. Стандарт разрабатывается совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в рамках подкомитета SC 2 (Coded character sets) объединённого технического комитета JTC 1 (Information technology). ISO/IEC 10646 является основой для многих других стандартов и реализаций, включая стандарт Unicode, с которым он синхронизирован.

История

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

До появления единого стандарта кодирования текста существовало множество несовместимых систем (ASCII, KOI-8, CP1251, JIS X 0208 и др.), что затрудняло обмен данными между разными языками и платформами. В 1980-х годах несколько организаций, включая Xerox и Apple, начали работу над универсальной кодировкой. В 1984 году ISO создала технический комитет для разработки международного стандарта.

Создание UCS и первые версии

Первая версия стандарта, известная как ISO/IEC 10646-1:1993, была опубликована в 1993 году. Она определяла 16-битное кодовое пространство (65536 кодовых точек), разделённое на плоскости. В том же году был опубликован стандарт Unicode 1.1, который был синхронизирован с UCS. Однако 16-битное пространство быстро оказалось недостаточным для охвата всех исторических и современных письменностей.

Расширение до 32 бит и суррогатные пары

В 1996 году вышла вторая версия (ISO/IEC 10646-1:2000), которая ввела 32-битное кодовое пространство (до 0x10FFFF, то есть 1 114 112 кодовых точек). Для обратной совместимости с 16-битными системами был разработан механизм суррогатных пар в UTF-16, позволяющий кодировать точки за пределами первой плоскости (Basic Multilingual Plane, BMP). С 2003 года стандарт публикуется как единый документ (ранее он делился на части).

Синхронизация с Unicode

С 1991 года ISO/IEC 10646 и Unicode Consortium поддерживают тесную координацию. Все символы, добавляемые в Unicode, вносятся в UCS, и наоборот. Различия между стандартами минимальны: Unicode включает дополнительные алгоритмы обработки текста (например, двунаправленное письмо, нормализацию), в то время как ISO/IEC 10646 сосредоточен исключительно на кодировании символов.

Структура и кодирование

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

Стандарт определяет кодовое пространство от 0 до 0x10FFFF (1 114 112 позиций). Оно разбито на 17 плоскостей (planes) по 65 536 кодовых точек каждая:

ПлоскостьДиапазонНазваниеОписание
Плоскость 00x0000–0xFFFFОсновная многоязычная плоскость (BMP)Содержит большинство современных письменностей (латиница, кириллица, арабское письмо, китайские иероглифы и др.)
Плоскость 10x10000–0x1FFFFДополнительная многоязычная плоскость (SMP)Исторические письменности (египетские иероглифы, клинопись), музыкальные и математические символы
Плоскость 20x20000–0x2FFFFДополнительная идеографическая плоскость (SIP)Редкие и исторические китайские иероглифы (CJK)
Плоскость 30x30000–0x3FFFFТретичная идеографическая плоскость (TIP)Резерв для будущих идеографических символов
Плоскости 4–130x40000–0xDFFFFНе назначеныЗарезервированы для будущего использования
Плоскость 140xE0000–0xEFFFFДополнительная специального назначения (SSP)Управляющие символы, теги
Плоскости 15–160xF0000–0x10FFFFДополнительные частные зоны (PUA)Для частного использования (нестандартные символы)

Формы кодирования (UTF)

ISO/IEC 10646 определяет несколько форм представления кодовых точек в виде последовательностей байтов:

Классификация символов

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

Разработка и управление

Процесс добавления символов

Предложения по включению новых символов подаются национальными органами по стандартизации, организациями-членами ISO или экспертами. Каждое предложение должно содержать:

Заявки рассматриваются подкомитетом SC 2, после чего принимается решение о включении в следующую редакцию стандарта.

Версии и обновления

Стандарт обновляется примерно раз в 2–3 года. Последняя версия — ISO/IEC 10646:2023 (7-е издание). Основные изменения в новых версиях включают добавление символов для ранее не охваченных письменностей (например, древнеперсидской клинописи, египетских иероглифов), эмодзи, а также уточнение свойств существующих символов.

Связь с Unicode

Хотя оба стандарта синхронизированы, Unicode Consortium публикует более частые обновления (ежегодно). ISO/IEC 10646 обычно включает изменения Unicode с задержкой в 1–2 года. На практике разработчики программного обеспечения ориентируются на Unicode, так как он предоставляет более детальную документацию (алгоритмы, данные о свойствах символов, таблицы соответствия).

Применение

Операционные системы

Современные операционные системы (Windows, macOS, Linux, iOS, Android) используют UCS в качестве основы для своих системных кодировок. Например, в Windows для имён файлов применяется UTF-16, в Linux — UTF-8.

Веб и интернет

Протокол HTTP, HTML5 и XML по умолчанию используют кодировку UTF-8 (реализацию UCS). Браузеры и веб-серверы поддерживают UCS для корректного отображения текстов на любых языках.

Базы данных

Большинство современных СУБД (MySQL, PostgreSQL, Oracle, Microsoft SQL Server) поддерживают UCS через типы данных, такие как NVARCHAR или TEXT с кодировкой UTF-8/UTF-16.

Программирование

Языки программирования (Java, C#, Python, JavaScript) используют UCS для внутреннего представления строк. В C++ поддержка UCS реализована через типы char16_t и char32_t (начиная с C++11).

Типографика и издательское дело

Системы вёрстки (TeX, Adobe InDesign) и шрифтовые форматы (OpenType, TrueType) поддерживают UCS для выбора глифов по кодовым точкам.

Критика и ограничения

Размер кодового пространства

Хотя 1,1 миллиона кодовых точек кажется большим числом, некоторые исследователи отмечают, что для полного охвата всех исторических письменностей (например, клинописи, египетских иероглифов, древнекитайских вариантов) может потребоваться больше места. Однако текущее пространство считается достаточным на десятилетия вперёд.

Сложность нормализации

UCS определяет несколько способов представления одного и того же символа (например, буква «é» может быть как отдельным символом U+00E9, так и последовательностью «e» + диакритический знак U+0301). Это требует применения алгоритмов нормализации (NFC, NFD, NFKC, NFKD), что усложняет обработку текста.

Совместимость с устаревшими системами

Переход на UCS в старых системах (например, мейнфреймах, встроенных устройствах) требует значительных усилий. Многие legacy-кодировки (EBCDIC, KOI-8) до сих пор используются в отдельных нишах.

Политические и культурные аспекты

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

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

Источники

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

На главную BFOmetr →