Юникод

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Alecv (обсуждение | вклад) в 11:50, 8 апреля 2005 (bidir, недостатки). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

Юникод (Unicode, (редк.) уникод, универсальная система кодирования) — стандарт кодировки знаков, позволяющий представить знаки практически всех письменных языков. Юникод имеет несколько форм представления, включая UTF-7, UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). В Microsoft Windows NT и основанных на ней системах Windows 2000 и Windows XP поддерживается форма UTF-16. В UNIX-подобных операционных системах GNU/Linux, BSD и Mac OS X поддерживается форма UTF-8.

Стандарт предложен в 1991 году некоммерческой организацией «Unicode Consortium». Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита и кириллицы, при этом становятся ненужными кодовые страницы.

Коды в стандарте Unicode разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем. Под символы кириллицы выделены коды от U+0400 до U+052F.

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

В UTF-8 и UTF-32 максимальный размер кодового пространства составляет 231 (2 147 483 648), а в UTF-7 и UTF-16 лишь 220+216 (1 114 112). Впрочем, даже и этого более чем достаточно — на сегодняшний день используется чуть больше 96 000 кодовых позиций.

Система кодирования

Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для компьютерной обработки текстовых данных.

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

Графические символы включают в себя следующие группы:

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

Юникод — это система для линейного представления текста. Символы, имеющие дополнительные надстрочные или подстрочные элементы, представляются в виде последовательности кодов, составленной по определённым правилам.

Графические символы в Юникод подразделяются на протяжённые и непротяжённые (бесширинные). Непротяженные символы при отображении не занимают места в строке. К ним относятся ударения, диакритические знаки и т. п. При кодировании в Юникод как протяжённые, так и непротяжённые символы имеют собственные коды. Протяженные символы иначе называются базовыми, а непротяжённые — комбинируемыми, потому что они не могут встречаться самостоятельно. Например, символ «á» будет представлен как последовательность базового символа «a» и комбинируемого символа " ' ".

Проблема 16-битных реализаций

Первая версия Юникода использовала 16-битные символы, т. е. общее число кодов было 216 (65536). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. В дальнейшем, однако, было принято решение расширить кодовую область до 220+216 (1 114 112). Но поскольку многие компьютерные системы продолжали поддерживать только 16-битные символы, было решено всё наиболее важное кодировать только в пределах первых 65536 позиций (т. н. «basic multilingual plane»). Остальное было отведено для «экзотики» (например, систем письма вымерших языков или очень редко используемых китайских иероглифов).

Для улучшения совместимости со старыми 16-битными системами была изобретена система UTF-16, где первые 65536 позиций отображаются непосредственно как 16-битные числа, а остальные представляются в виде «суррогатных пар» (первый элемент пары из области U+D800…U+DBFF, второй элемент пары из области U+DC00…DFFF).

UTF-8

UTF-8 (Unicode Transformation Format) — это представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (реально только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.

Символы UTF-8 получаются из Unicode следующим образом:

Unicode UTF-8
0x00000000 — 0x0000007F: 0xxxxxxx
0x00000080 — 0x000007FF: 110xxxxx 10xxxxxx
0x00000800 — 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 — 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 — 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 — 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Версии юникода

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

  • 1.1 (соответствует стандарту ISO/IEC 10646—1: 1993),
  • 2.0, 2.1 (тот же стандарт ISO/IEC 10646—1: 1993 плюс дополнения: «Amendments» с 1-го по 7-е и «Technical Corrigenda» 1 и 2),
  • 3.0 (стандарт ISO/IEC 10646—1:2000).
  • 3.2 (стандарт 2002 года)
  • 4.0 (стандарт 2003)
  • 4.01 (стандарт 2004)
  • 4.1 (стандарт 2005)

Двунаправленное письмо

Стандарт Юникод поддерживает языки как с направлением написание справа-налево (RTL) так и с написанием слева-направо (LTR) (иврит, арабский). Кроме того, Юникод поддерживает комбинированные тексты, содержащие одновременно RTL и LTR фразы. Данная возможность называется Bidir.

Проблемы Юникода

Как любая система, Юникод не свободен от недостатков.

  • Письменность старославянского языка содержит дополнительные графичские элементы: титлы и звательца. Они не могут быть должным образом представлены в системе Юникод, хотя отдельные элементы для этого имеются.
  • Тексты на японском языке имеют традиционное написание сверху-вниз, начиная с правого верхнего угла. Данная возможность не отражена в Юникоде.

«Юникод» или «Уникод»?

В русском языке слова с латинским элементом «uni-» традиционно писались через «уни-» (универсальный, униполярный, унификация, униформа).  Однако для слова Unicode распространилось написание «Юникод» (видимо, изобретённое в компании Майкрософт при создании русской версии Windows 95).  С пуристической же точки зрения предпочтительнее использовать написание «Уникод», так как в русском языке уже есть морфемы «уни-» и «код».  До сих пор написание «юни-» использовалось только для собственных имён, заимствованных из английского языка (напр., «Юнилевер»).  «Unicode» — международный термин, никак не привязанный к английскому языку, однако написание «Юникод» уже твёрдо вошло в русскоязычные тексты. Согласно Яндексу частота использования слова «Юникод» в 3,5 раза превышает «Уникод», поэтому в Википедии используется наиболее широко распространённый вариант.

Ссылки

См. также

minnan:Thong-iōng-bé