Универсальный кодированный набор символов ( UCS , Unicode ) — стандартный набор символов , определенный международным стандартом ISO / IEC 10646 «Информационные технологии — Универсальный кодированный набор символов (UCS)» (плюс поправки к этому стандарту), который является основой многих кодировок символов , совершенствуясь по мере добавления символов из ранее не представленных систем набора текста.
UCS имеет более 1,1 миллиона возможных кодовых точек, доступных для использования/распределения, но только первые 65 536, которые являются базовой многоязыковой плоскостью (BMP), вошли в общее использование до 2000 года. Эта ситуация начала меняться, когда в 2006 году Китайская Народная Республика (КНР) постановила, что все программное обеспечение, продаваемое в ее юрисдикции, должно поддерживать GB 18030. Это потребовало, чтобы программное обеспечение, предназначенное для продажи в КНР, вышло за рамки BMP. [ необходимо разъяснение ]
Система намеренно оставляет много кодовых точек не назначенными символам, даже в BMP. Это делается для того, чтобы обеспечить будущее расширение или минимизировать конфликты с другими формами кодирования.
В оригинальном издании UCS определен UTF-16 , расширение UCS-2, для представления кодовых точек за пределами BMP. Диапазон кодовых точек в зоне S (специальной) BMP остается неназначенным символам. UCS-2 запрещает использование кодовых значений для этих кодовых точек, но UTF-16 допускает их использование парами. Unicode также принял UTF-16, но в терминологии Unicode элементы зоны high-half становятся «high surrogates», а элементы зоны low-half становятся «low surrogates». [ необходимо разъяснение ]
Другая кодировка, UTF-32 (ранее называвшаяся UCS-4), использует четыре байта (всего 32 бита) для кодирования одного символа кодового пространства. Таким образом, UTF-32 допускает двоичное представление каждой кодовой точки (по состоянию на 2024 год) в API и программных приложениях.
Международная организация по стандартизации (ИСО) приступила к разработке универсального набора символов в 1989 году и опубликовала проект ISO 10646 в 1990 году. Хью МакГрегор Росс был одним из его главных разработчиков.
Эта работа велась независимо от разработки стандарта Unicode , который разрабатывался с 1987 года компаниями Xerox и Apple .
Первоначальный проект ISO 10646 существенно отличался от действующего стандарта. Он определял:
для видимого общего количества в 2 147 483 648 символов, но на самом деле стандарт мог кодировать только 679 477 248 символов, поскольку политика запрещала байтовые значения кодов управления C0 и C1 (от 0x00 до 0x1F и от 0x80 до 0x9F в шестнадцатеричной системе счисления) в любом из четырех байтов, определяющих группу, плоскость, строку и ячейку. Например, латинская заглавная буква A имела местоположение в группе 0x20, плоскости 0x20, строке 0x20, ячейке 0x41.
Символы этого изначального стандарта ISO/IEC 10646 можно закодировать одним из трех способов:
Таким образом, в 1990 году существовало две инициативы по созданию универсального набора символов: Unicode с 16 битами на каждый символ (65 536 возможных символов) и ISO/IEC 10646. Компании-разработчики программного обеспечения отказались принять требования стандарта ISO по сложности и размеру и смогли убедить ряд национальных органов ISO проголосовать против него. [ необходима цитата ] Чиновники ISO поняли, что они не могут продолжать поддерживать стандарт в его текущем состоянии, и договорились об унификации своего стандарта с Unicode. Произошло два изменения: снятие ограничения на символы (запрет значений управляющего кода), что открыло кодовые точки для распределения; и синхронизация репертуара Базовой многоязычной плоскости с репертуаром Unicode.
Между тем, с течением времени ситуация в самом стандарте Unicode изменилась: 65 536 символов стало недостаточно, и стандарт с версии 2.0 и далее поддерживает кодирование 1 112 064 кодовых точек из 17 плоскостей с помощью суррогатного механизма UTF-16 . По этой причине ISO/IEC 10646 был ограничен содержанием столько символов, сколько могло быть закодировано UTF-16 и не более, то есть чуть более миллиона символов вместо более 679 миллионов. Кодировка UCS-4 ISO/IEC 10646 была включена в стандарт Unicode с ограничением диапазона UTF-16 и под названием UTF-32 , хотя она почти не используется вне внутренних данных программ.
Роб Пайк и Кен Томпсон , разработчики операционной системы Plan 9 , разработали новую, быструю и хорошо продуманную кодировку смешанной ширины, которая также была обратно совместима с 7-битной ASCII , которая стала называться UTF-8 [ 1] и в настоящее время является самой популярной кодировкой UCS.
ISO/IEC 10646 и Unicode имеют идентичный репертуар и номера — одни и те же символы с одинаковыми номерами существуют в обоих стандартах, хотя Unicode выпускает новые версии и добавляет новые символы чаще. Unicode имеет правила и спецификации, выходящие за рамки ISO/IEC 10646. ISO/IEC 10646 — это простая таблица символов, расширение предыдущих стандартов, таких как ISO/IEC 8859. Напротив, Unicode добавляет правила для сортировки , нормализации форм и двунаправленного алгоритма для сценариев справа налево, таких как арабский и иврит. Для взаимодействия между платформами, особенно если используются двунаправленные сценарии, недостаточно поддерживать ISO/IEC 10646; необходимо реализовать Unicode.
Для поддержки этих правил и алгоритмов Unicode добавляет множество свойств к каждому символу в наборе, например, свойства, определяющие двунаправленный класс символа по умолчанию, и свойства, определяющие, как символ сочетается с другими символами. Если символ представляет числовое значение, например, европейское число '8' или вульгарную дробь '¼', это числовое значение также добавляется как свойство символа. Unicode предполагает, что эти свойства будут поддерживать совместимую обработку текста со смесью языков.
Некоторые приложения поддерживают символы ISO/IEC 10646, но не полностью поддерживают Unicode. Одно из таких приложений, Xterm , может правильно отображать все символы ISO/IEC 10646, которые имеют сопоставление символов и глифов один к одному [ необходимо разъяснение ] и однонаправленность. Оно может обрабатывать некоторые комбинированные знаки простыми методами перечеркивания, но не может отображать иврит (двунаправленный), деванагари (один символ для многих глифов) или арабский язык (обе функции). Большинство приложений с графическим интерфейсом используют стандартные процедуры рисования текста ОС, которые обрабатывают такие сценарии, хотя сами приложения по-прежнему не всегда обрабатывают их правильно.
ISO/IEC 10646 , общая, неформальная ссылка на семейство стандартов ISO/IEC 10646, приемлема в большинстве текстов. И хотя это отдельный стандарт, термин Unicode используется так же часто, неформально, при обсуждении UCS. Однако любые нормативные ссылки на UCS как на публикацию должны содержать год издания в форме ISO/IEC 10646:{year} , например: ISO/IEC 10646:2014 .
С 1991 года Консорциум Unicode и ISO / IEC совместно разработали Стандарт Unicode («Unicode») и ISO/IEC 10646. Репертуар, имена символов и кодовые точки Unicode версии 2.0 в точности соответствуют таковым в ISO/IEC 10646-1:1993 с его первыми семью опубликованными поправками. После публикации Unicode 3.0 в феврале 2000 года соответствующие новые и обновленные символы вошли в UCS через ISO/IEC 10646-1:2000. В 2003 году части 1 и 2 ISO/IEC 10646 были объединены в одну часть, которая с тех пор имела ряд поправок, добавляющих символы в стандарт примерно синхронно со стандартом Unicode.
Сопутствующие стандарты: