UNICODE(7)

НАИМЕНОВАНИЕ
Unicode - унифицированное 16-битное надмножество символов

ОПИСАНИЕ
Международный стандарт ISO 10646 описывает Универсальный Набор Символов Universal Character Set (UCS). UCS содержит все символы всех остальных стандартных наборов символов. Также он гарантирует полную совместимость, т. е. для любой другой кодировки можно построить таблицы преобразования так, что при преобразовании из этой кодировки в UCS и обратно информация не будет потеряна. UCS содержит символы, требуемые для представления практически всех известных языков. Сюда входит множество языков, которые используют расширения латиницы, а также следующие начертания и языки: греческий, кириллический, иврит, арабский, армянский, грузинский, японский, китайский, хирагана, катакана, корейский, Hangul, деванагари, бенгальский, Gurmukhi, Gujarati, Oriya, тамильский, телугу, Kannada, Malayam, тайский, лаосский, Bopomofo, и множество других. Идет работа по включению тибетской, кхмерской, рунической и эфиопской письменности, иероглифов, различных индо-европейских языков, а также многих других. Для большинства последних на момент публикации стандарта (в 1993-м году) не было до конца известно, как лучше всего закодировать их. В дополнение к символам, которые требуются для этих языков, также присутствует множество графических, типографских, математических и научных символов, типа тех, что используются в TeX, PostScript, MS-DOS, Macintosh, Videotext, OCR, а также множестве текстовых процессоров. Кроме того, в UCS включены специальные коды, гарантирующие полную совместимость со всеми существующими наборами символов. Стандарт UCS (ISO 10646) описывает архитектуру 31-битного набора символов. Однако в настоящее время символы присвоены только первым 65534 позициям (от 0x0000 до 0xfffd), которые называются Базовый Мульти-языковый План (BMP). Ожидается, что только очень экзотические символы (типа иероглифов), предназначенные для специальных научных исследований, получат "прописку" за пределами этого 16-битного BMP. Символы UCS с кодами от 0x0000 до 0x007f идентичны классическому набору символов US-ASCII, а символы в диапазоне кодов от 0x0000 до 0x00ff идентичны набору символов ISO 8859-1 Latin-1.

КОМБИНИРУЮЩИЕ СИМВОЛЫ
Некоторые коды в UCS были назначены комбинирующим символам. Такие символы похожи на ударения в полиграфии, которые не изменяют размер своей буквы. Комбинирующие символы просто добавляют акцент предыдущему символу. Большинство важных акцентирующих символов имеют свои собственные коды в UCS, тогда как механизм комбинирующих символов позволяет добавлять ударения и другие диакритические отметки к любому символу. Комбинирующие символы всегда следуют за символом, который они модифицируют. Например, немецкий символ Умляут-А ("Латинская большая буква A с тремой") может быть представлен предварительно скомпонованным (код UCS 0x00c4), или как комбинация обычного символа "Латинская большая буква А" и символа "комбинирующая трема": 0x0041 0x0308.

УРОВНИ РЕАЛИЗАЦИИ
Так как не предполагается, что все системы поддержат такие продвинутые механизмы, как комбинирование символов, ISO 10646 определяет следующие три уровня реализации UCS:

Уровень 1
    Комбинированные символы и символы Hangul Jamo (особая, усложненная кодировка корейской рукописи, где слоги Hangul кодируются двумя или тремя подсимволами) не поддерживается.

Уровень 2
    Как уровень 1, однако теперь в некоторых языках (таких как иврит, арабский, деванагари, бенгальский, Gurmukhi, Gujarati, Oriya, тамильский, телугу, Kannada, Malayalam, тайский и лаосский) допускаются некоторые комбинированные символы.

Уровень 3
    Поддержка всех символов UCS.

Стандарт Unicode 1.1, опубликованный Консорциумом Unicode, описывает UCS Basic Multilingual Plane на третьем уровне реализации, как сказано в стандарте ISO 10646. Также Unicode 1.1 добавляет некоторые семантические определения для некоторых символов к определениям из стандарта ISO 10646.

РЕАЛИЗАЦИЯ UNICODE В LINUX
В Linux на данный момент реализован только 1-й уровень BMP. с целью избежать сложностей реализации комбинирующих символов. Более высокие уровни подходят для специфических форматов обработки текста, но не как общесистемный набор символов. Переменные языка "C" типа wchar_t содержат 32-битное целое со знаком, которое интерпретируется как коды UCS4. Настройки локализации указывают, какая кодировка является системной, например UTF-8 или ISO 8859-1. Библиотечные функции wctomb, mbtowc, или wprintf могут использоваться для преобразования символов и строк типа wchar_t, которые используются в программе, в системную кодировку или обратно.

ПРИВАТНАЯ ОБЛАСТЬ
В BMP в диапазоне кодов от 0xe000 до 0xf8ff никогда не будет назначен ни один символ, так как эта область зарезервирована стандартом для использования в любых целях. В сообществе Linux этот диапазон был поделен еще раз, причем поддиапазон от 0xe000 до 0xefff может использоваться в своих личных целях, а использование диапазона от 0xf000 до 0xf8ff координируется большинством пользователей Linux. Регистрацией символов, назначенных для Linux-зоны, в данный момент занимается Peter Anvin <Peter.Anvin@linux.org>, Yggdrasil Computing, Inc. В данный момент Linux-зона содержит некоторые графические символы из DEC VT100, отсутствующие в Unicode, предоставляет прямой доступ к символам в буфере шрифтов консоли и содержит символы, используемые некоторыми продвинутыми языками типа клингонского.

ЛИТЕРАТУРА

*   Information technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane. International Standard ISO 10646-1, International Organization for Standardization, Geneva, 1993. Это официальная спецификация стандарта UCS. Довольно официальная, довольно толстая и довольно дорогая. Если вы хотите купить ее, смотрите на http://www.iso.ch.

*   The Unicode Standard - Worldwide Character Encoding Version 1.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 1991. В данный момент доступна версия Unicode 1.1.4. Изменения относительно версии 1.0 доступны с ftp://ftp.unicode.org. Unicode 2.0 будет опубликован в печатном виде в 1996-м году.

*   S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3. Хорошее справочное руководство по языку программирования C. Четвертая редакция содержит, в том числе, Первую Поправку 1994-го года к стандарту ISO C (ISO/IEC 9899:1990), которая добавляет в библиотеку С множество новых функций для поддержки многобайтных наборов символов.

ОШИБКИ
Во время написания этого руководства поддержка UCS в библиотеке libc ОС Linux была далека от завершения.

АВТОР
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

СМОТРИ ТАКЖЕ
utf-8(7)

ПЕРЕВОД
Перевел с английского Алексей Миллер <asm@asm.kiev.ua> 2000