unicode -
универсальный
набор
символов
Universal Character Set (UCS)
(универсальный
набор
символов —
Юникод)
определён
в
международном
стандарте ISO
10646. UCS содержит
все
символы
других
стандартов.
Его
использование
гарантирует
«полную
взаимозаменяемость»,
другими
словами,
таблицы
для
преобразований
могут быть
построены
таким
образом,
что не
произойдёт
потери
информации
при
преобразовании
строки из
сторонней
кодировки
в UCS и
обратно.
UCS содержит
символы,
необходимые
для
представления
практически
всех
известных
сейчас
языковых
символов. В
него
включены
не только
языковые
символы из
латинской,
греческой,
кириллицы,
иврита,
арабской,
армянской,
грузинской
письменности,
но и
китайские,
японские и
корейские
идеограммы,
а также
символы из
таких
письменностей
как
хирагана,
катакана,
хангул,
деванагари,
бенгальской,
гурмуки,
гуджарати,
ория,
тамильской,
телугской,
каннада,
малаяламской,
тайской,
лаосской,
кхмерской,
бопомофо,
тибетской,
рунической,
эфиопской,
канадского
слогового
письма,
чероки,
монгольской,
охамской,
мьянмарской,
синхальской,таанской,
юи и других.
По ещё не
включённым
письменностям
постоянно
ведутся
работы для
поиска их
самой
оптимальной
кодировки
для
компьютеров
и
добавлении.
К ним
относятся
не только
различные
иероглифы
и
письменности
из
индо-европейской
исторической
группы, но и
некоторые
искусственные
языки,
такие как
тенгвар,
сирт и
клингонский.
Также UCS
содержит
большое
множество
графических,
типографических,
математических
и научных
символов,
используемых
в таких
программах,
как TeX, Postscript, APL, MS-DOS, MS-Windows, Macintosh,
шрифтах OCR и
многих
других
текстовых
процессорах
и
издательских
системах.
Стандарт UCS (ISO 10646)
описывает
31-битную
архитектуру
набора
символов,
состоящую
из 128 24-битных
групп,
каждая из
которых
разделена
на 256 16-битных
плоскостей,
которые, в
свою
очередь,
состоят из 256
8-битных
строк и 256
колонок,
каждая для
одного
символа. В 1
части
стандарта (ISO
10646-1)
определяются
первые 65534
кодируемых
позиций (с 0x0000
по 0xfffd), каждая
из которых
образует Basic
Multilingual Plane (BMP) (
основную
многоязычную
матрицу),
являющуюся
плоскостью
0 в группе 0. В 2
части
стандарта (ISO
10646-2)
добавляются
символы, не
вошедшие в BMP,
в
некоторые
дополнительные
плоскости
в
диапазоне
от 0x10000 до 0x10ffff
группы 0.
Пока нет
планов по
добавлению
символов
за предел 0x10ffff
в
существующий
стандарт,
поэтому в
обозримом
будущем во
всём
закодированном
пространстве
в
действительности
будет
использоваться
только
малая
часть
группы 0. BMP
содержит
все
символы,
используемые
в других
наборах
символов.
Дополнительные
плоскости,
добавляемые
ISO 10646-2
покрывают
некоторые
особенные,
специальные
и
экзотические
символы,
используемые
в науке, при
печати
словарей,
издательской
индустрии,
протоколах
высокого
уровня и
некоторыми
энтузиастами.
Представление
каждого
символа в UCS в
виде
-байтного
слова
называют
формой UCS-2
(только для
символов BMP), UCS-4
называют
представление
каждого
символа
4-байтным
словом.
Также
существуют
2 формы
кодировки:
UTF-8 — для
совместимости
со старым
ПО,
работающим
с
кодировкой
ASCII, и UTF-16 — для
совместимости
с ПО,
работающим
с
кодировкой
UCS-2, для не BMP
символов
до 0x10ffff
позиции.
Символы UCS от
0x0000 до 0x007f
идентичны
обычному
набору
символов US-ASCII,
а символы в
диапазоне
от 0x0000 до 0x00ff
идентичны
символам ISO 8859-1
(Latin-1).
Некоторые
позиции в UCS
зарезервированы
для
комбинирующих
символов.
Они
аналогичны
клавишам
печатной
машинки,
которые
служат для
набора
букв с
ударением.
Комбинирующий
символ
лишь
добавляет
ударение к
предыдущему
символу.
Наиболее
употребляемые
символы,
требующие
ударения,
имеют
собственный
код в UCS,
однако
комбинирующий
символ
позволяет
добавить
ударение
или другой
диакритический
знак к
любому
символу.
Комбинирующие
символы
всегда
указываются
после
буквы,
которую
они
изменяют.
Например,
немецкий
символ
«умляут-А»
(латинская
заглавная
буква А с
диерезой)
может быть
представлен
как
зарезервированный
специальный
символ UCS с
кодом 0x00c4, или
как
комбинация
обыкновенной
«латинской
заглавной
буквы А» и
последующей
«комбинирующей
диерезы: 0x0041 0x0308.
Комбинирующие
символы
являются
необходимым
инструментом
для
кодирования
символов
тайского
языка,
математики
и для
пользователей
международного
фонетического
алфавита
(International Phonetic Alphabet).
Так как не
все
системы
могут
поддерживать
такой
сложный
механизм,
как
реализацию
комбинирующих
символов,
стандарт ISO 10646-1
предусматривает
следующие
три
уровня
реализации
UCS:
- Уровень
1
- Комбинирующие
символы и
символы Hangul Jamo
(вариант
кодировки
корейского
письма, где
слоги
хангыль
кодируются
по два или
по три
гласных
кода) не
поддерживаются.
- Уровень
2
- В
дополнении
к символам
уровня 1
комбинирующие
символы
разрешено
использовать
для
некоторых
языков, в
которых
они важны
(например:
тайский,
лаосский,
иврит,
арабский,
деванагари,
малаяламский).
- Уровень
3
- Поддерживаются
все
символы UCS.
Стандарт Unicode 3.0,
опубликованный
Unicode Consortium,
содержит
точную
реализацию
UCS Basic Multilingual Plane на
уровне 3, как
описано в
стандарте ISO
10646-1:2000. В Unicode 3.1
добавлены
дополнительные
плоскости ISO
10646-2. Стандарт
Юникода и
технические
сообщения,
публикуемые
Unicode Consortium,
предоставляют
много
дополнительной
информации
по
семантике
и
рекомендации
по
использованию
разных
символов.
Также
поясняются
принципы и
алгоритмы
для
редактирования,
сортировки,
сравнения,
нормализации,
преобразования
и вывода
строк
Юникода.
В системах
GNU/Linux тип языка
Cи
wchar_t
является
32-битным
знаковым
целым
типом. Его
значения
всегда
интерпретируются
библиотекой
Си как
значения
кодов UCS (во
всех
локалях); в
этом
случае,
согласно
стандарту ISO
C99,
библиотека
GNU C
определяет
константу
__STDC_ISO_10646__.
UCS/Unicode может
использоваться
подобно ASCII в
потоках
ввода/вывода,
соединениях
с
терминалами,
в
текстовых
файлах,
названиях
файлов и в
переменных
окружения
в виде
многобайтовой
кодировке
UTF-8,
совместимой
с ASCII. Для
обозначения
использования
UTF-8 как
кодировки
во всех
приложениях
должна
быть
выбрана
подходящая
локаль
через
переменные
окружения
(например,
«LANG=ru_RU.UTF-8»).
The
nl_langinfo(CODESET) function returns the name of the selected
encoding. Library functions such as
wctomb(3) and
mbsrtowcs(3)
can be used to transform the internal
wchar_t characters and strings
into the system character encoding and back and
wcwidth(3) tells how
many positions (0–2) the cursor is advanced by the output of a
character.
В основной
многоязычной
матрице
диапазон с
0xe000 до 0xf8ff
никогда не
будет
использован
для
обозначения
стандартных
символов,
он
зарезервирован
для
частного
использования.
В Linux эта
закрытая
область
делится на:
диапазон 0xe000
по 0xefff может
использоваться
конечным
пользователем;
диапазон 0xf000
по 0xf8ff (так
называемая
зона Linux)
может
использоваться
для
расширений,
согласованных
среди
пользователей
Linux. В
настоящее
время
регистрацией
символов в
зоне Linux
занимается
LANANA, а сам
реестр
находится
в файле
Documentation/admin-guide/unicode.rst
исходного
кода ядра Linux
(в
Documentation/unicode.txt до Linux 4.10).
Две другие
плоскости
зарезервированы
для
закрытого
использования,
плоскость 15
(дополнительная
закрытая
используемая
область-A,
диапазон
от 0xf0000 до 0xffffd) и
плоскость 16
(дополнительная
закрытая
используемая
область-B,
диапазон
от 0x100000 до 0x10fffd).
- •
- Information technology — Universal Multiple-Octet
Coded Character Set (UCS) — Part 1: Architecture and Basic
Multilingual Plane. International Standard ISO/IEC 10646-1, International
Organization for Standardization, Geneva, 2000.
- This is the official specification of UCS. Available
from
http://www.iso.ch/
- •
- The Unicode Standard, Version 3.0. The Unicode Consortium,
Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.
- •
- S. Harbison, G. Steele. C: A Reference Manual. Fourth
edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.
- Хорошая
книга о
программировании
на языке
Си.
Четвёртое
издание
включает в
себя
описание
поправки 1,
сделанной
в
стандарте
ISO C90 в 1994 году.
Эта
поправка
добавляет
к
стандарту
большое
количество
новых
библиотечных
функций Си
для
поддержки
кодирования
широких и
многобайтовых
символов,
но она не
так полна
как
стандарт ISO C99,
который
расширяет
поддержку
широких и
многобайтовых
символов.
- •
- Unicode Technical Reports.
- •
- Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
- •
- Bruno Haible: Unicode HOWTO.
locale(1),
setlocale(3),
charsets(7),
utf-8(7)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitriy Ovchinnikov
<
[email protected]>, Dmitry Bolkhovskikh <
[email protected]>,
Katrin Kutepova <
[email protected]>, Yuri Kozlov
<
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]