Кодировка unicode 1 символ весит. Кодировка Unicode. Юникод и традиционные кодировки

Юникод

Материал из Википедии - свободной энциклопедии

Перейти к: навигация , поиск

Юнико́д (чаще всего) или Унико́д (англ. Unicode ) - стандарт кодирования символов , позволяющий представить знаки практически всех письменных языков .

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

Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set ) и семейство кодировок (англ . UTF, Unicode transformation format ). Универсальный набор символов задаёт однозначное соответствие символов кодам - элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.

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

    1 Предпосылки создания и развитие Юникода

    2 Версии Юникода

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

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

    5 Модифицирующие символы

    6 Формы нормализации

    • 6.1 Примеры

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

    8 Представленные символы

    9 ISO/IEC 10646

    10 Способы представления

    • 10.1 UTF-8

      10.2 Порядок байтов

      10.3 Юникод и традиционные кодировки

      10.4 Реализации

    11 Методы ввода

    • 11.1 Microsoft Windows

      11.2 Macintosh

      11.3 GNU/Linux

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

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

    14 См. также

Предпосылки создания и развитие Юникода

К концу 1980-х годов стандартом стали 8-битные символы, при этом существовало множество разных 8-битных кодировок, и постоянно появлялись всё новые. Это объяснялось как постоянным расширением круга поддерживаемых языков, так и стремлением создать кодировку, частично совместимую с какой-нибудь другой (характерный пример - появление альтернативной кодировки для русского языка, обусловленное эксплуатацией западных программ, созданных для кодировки CP437 ). В результате появилось несколько проблем:

    Проблема «кракозябр » (отображения документов в неправильной кодировке): её можно было решить либо последовательным внедрением методов указания используемой кодировки, либо внедрением единой для всех кодировки.

    Проблема ограниченности набора символов: её можно было решить либо переключением шрифтов внутри документа, либо внедрением «широкой» кодировки. Переключение шрифтов издавна практиковалось в текстовых процессорах , причём часто использовались шрифты с нестандартной кодировкой , т. н. «dingbat fonts» - в итоге при попытке перенести документ в другую систему все нестандартные символы превращались в кракозябры.

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

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

Было признано необходимым создание единой «широкой» кодировки. Кодировки с переменной длиной символа, широко использующиеся в Восточной Азии, были признаны слишком сложными в использовании, поэтому было решено использовать символы фиксированной ширины. Использование 32-битных символов казалось слишком расточительным, поэтому было решено использовать 16-битные.

Таким образом, первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 2 16 (65 536). Отсюда происходит практика обозначения символов четырьмя шестнадцатеричными цифрами (например, U+04F0). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. Редко используемые символы должны были размещаться в «области пользовательских символов» (private use area), которая первоначально занимала коды U+D800…U+F8FF. Чтобы использовать Юникод также и в качестве промежуточного звена при преобразовании разных кодировок друг в друга, в него включили все символы, представленные во всех наиболее известных кодировках.

В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим, коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. Способы представления ).

Поскольку в ряде компьютерных систем (например, Windows NT ) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых 65 536 позиций (так называемая англ. basic multilingual plane , BMP ). Остальное пространство используется для «дополнительных символов» (англ. supplementary characters ): систем письма вымерших языков или очень редко используемых китайских иероглифов, математических и музыкальных символов.

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

Поскольку в UTF-16 можно отобразить только 2 20 +2 16 −2048 (1 112 064) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода.

Хотя кодовая область Юникода была расширена за пределы 2 16 уже в версии 2.0, первые символы в «верхней» области были размещены только в версии 3.1.

Роль этой кодировки в веб-секторе постоянно растёт, на начало 2010 доля веб-сайтов, использующих Юникод, составила около 50 %.

В попытках настроить ту или иную функцию интернета любой пользователь наверняка сталкивался с таким понятием, как «Юникод». Чтобы узнать, что означает это понятие, прочитайте данную статью до конца.

«Юникод»: определение

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

«Юникод»: причины создания

Еще задолго до появления системы «Юникод», кодировки выбирались исходя из предпочтений автора документа. Нередко по этой причине, чтобы прочитать один документ, приходилось использовать различные таблицы. Однако делать это приходилось по несколько раз. Это существенно усложняло жизнь обычным пользователям. Как уже было сказано ранее, в 1991 году для решения данной проблемы некоммерческая организация Unicode Inc. предложила использовать новый тип кодирования информации. Данный тип кодирования был создан для объединения самых разнообразных стандартов. Кодировка «Юникод» позволила добиться невозможного: создать инструмент, поддерживающий огромное количество разнообразных символов. Полученный результат превзошел ожидания: получились документы, которые одновременно могли содержать в себе как русский, так и английский текст, а также математические выражения и латынь. Перед созданием единой системы кодировки разработчикам предстояло решить целый ряд проблем, возникающих из-за существования огромного числа стандартов, которые уже существовали на данный момент. К самым распространенным из таких проблем относились ограниченность набора символов, эльфийские письмена, дублирование шрифтов и проблема преобразования различных кодировок.

«Юникод»: экскурс в историю

Представьте себе следующую картину: на дворе 80-е, компьютерная техника еще не получила столь широкого распространения и имеет вид, отличный от сегодняшнего. Каждая операционная система по-своему уникальна и доработана энтузиастами под те или иные конкретные нужды. В результате необходимость в обмене информацией привела к дополнительным доработкам. При попытке прочитать документ, созданный в другой операционной системе, на экране обычно выводились непонятные наборы символов. Это требовало дальнейшей работы с кодировкой, которую не всегда получалось выполнить быстро. Порой на обработку необходимого документа уходило несколько месяцев. Пользователи, которым часто приходится обмениваться информацией, стали создавать для себя особые таблицы преобразования. Работа с такими таблицами выявила одну интересную особенность: создавать такие таблицы необходимо одновременно по двум направлениям. Машина не может выполнить банальную инверсию вычислений. Для нее в правом столбце записан исходный файл, а в левом результат. Наоборот переставить их нельзя. При необходимости использовать в документе какие-то специальные символы, сначала их необходимо было добавить, а потом еще объяснить другому пользователю, что нужно с ними сделать, чтобы они не превратились в «крякозябры». Также стоит учитывать, что под каждую кодировку приходилось разрабатывать собственные шрифты. Это привело к созданию огромного количества дублей в операционной системе. Так, например, на одной странице пользователь мог наблюдать десяток шрифтов, идентичных стандартному Times New Roman, но с пометками UCS-2, UTF-16, UTF-8, ANSI. Таким образом, назрела необходимость разработки универсального стандарта.

«Юникод»: создатели

Начало истории создания «Юникод» можно отнести к 1987 году. Именно тогда Джо Беккер из компании Xerox вместе с Марком Дэвисом и Ли Коллинзом из компании Apple приступили к исследованиям в области практической разработки универсальной кодировки. В 1988 году Джо Беккер опубликовал проект создания международной многоязычной кодировки. Несколько месяцев спустя работая группа по разработке «Юникод» была расширена. В нее вошли такие специалисты, как Гленн Райт из Sun Microsystems, Майк Кернеган и Кен Уистлер из RLG. Это позволило завершить работы по предварительному формированию единого стандарта кодирования.

«Юникод»: общее описание

В основе кодировки Unicode лежит общее понятие символа. Под данным определением понимают абстрактное явление, которое существует в виде письменности, реализуемой через графемы. В «Юникод» каждому символу сопоставляется уникальный код, который принадлежит тому или иному блоку стандарта. Так, к примеру, графема «В» присутствует и в английском, и в русском языках, но ей соответствует два разных символа. К данным символам также может применяться преобразование в строчную букву. Это значит, что каждый из этих символов описывается ключом, набором свойств и названием.

«Юникод»: преимущества

От других современных систем кодировки «Юникод» отличается огромным запасом знаков для «шифрования» различных символов. Все дело в том, что предшествующие кодировки имели всего 8 бит. Это значит, что они поддерживали всего 28 символов. Новая разработка имела 216 символов, что стало большим шагом вперед. Таким образом появилась возможность закодировать практически все существующие алфавиты. Необходимость использования таблиц преобразования с появлением «Юникода» отпала. Наличие единого стандарта просто сводило их полезность к нулю. Вместе с тем исчезли и «крякозябры». Появление нового стандарта сделало их существование невозможным. Также была исключена необходимость создания дублей шрифтов.

«Юникод»: развитие

Несмотря на то, что прогресс не стоит на месте, кодировка «Юникод» продолжает удерживать лидирующие позиции в мире. Это стало возможным во многом благодаря тому, что он стал легко внедряемым и получил широкое распространение. При это не стоит считать, что сегодня используется такая же кодировка «Юникод», что и 25 лет назад. Сегодня используется версия 5.x.x. Число кодируемых символов возросло до 231. С момента возникновения до появления версии 2.0.0 кодировка «Юникод» увеличила число входящих в нее символов практически в два раза. В последующие годы такой рост возможностей продолжился. К моменту появления версии 4.0.0 возникла необходимость увеличения самого стандарта. В результате кодировка «Юникод» обрела вид, в котором мы ее знаем сегодня.

Что же еще полезного есть в «Юникод»? Кроме огромного, постоянно пополняющегося количества символов, кодировка «Юникод» имеет одну довольно полезную особенность. Это нормализация. Кодировка не тратит ресурсы компьютера на регулярную проверку одного и того же символа, который в разных алфавитах может иметь похожее написание. Для этой цели используется специальный алгоритм, который дает возможность вынести схожие символы отдельно графой и обращаться к ним, а не проверять каждый раз всю информацию. Всего разработано и внедрено четыре таких алгоритма. Преобразование в каждом из них осуществляется по определенному принципу, отличающемуся от других.

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

Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set) и семейство кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задаёт однозначное соответствие символов кодам - элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.

Стандарт Unicode был разработан с целью создания единой кодировки символов всех современных и многих древних письменных языков. Каждый символ в этом стандарте кодируется 16 битами, что позволяет ему охватить несравненно большее количество символов, чем принятые ранее 8-битовые кодировки. Еще одним важным отличием Unicode от других систем кодировки является то, что он не только приписывает каждому символу уникальный код, но и определяет различные характеристики этого символа, например:

Тип символа (прописная буква, строчная буква, цифра, знак препинания и т.д.);

Атрибуты символа (отображение слева направо или справа налево, пробел, разрыв строки и т.д.);

Соответствующая прописная или строчная буква (для строчных и прописных букв соответственно);

Соответствующее числовое значение (для цифровых символов).

Весь диапазон кодов от 0 до FFFF разбит на несколько стандартных подмножеств, каждое из которых соответствует либо алфавиту какого-то языка, либо группе специальных символов, сходных по своим функциям. На приведенной ниже схеме содержится общий перечень подмножеств Unicode 3.0 (рисунок 2).

Рисунок 2

Стандарт Unicode является основой для хранения и текста во многих современных компьютерных системах. Однако, он не совместим с большинством Интернет-протоколов, поскольку его коды могут содержать любые байтовые значения, а протоколы обычно используют байты 00 - 1F и FE - FF в качестве служебных. Для достижения совместимости были разработаны несколько форматов преобразования Unicode (UTFs, Unicode Transformation Formats), из которых на сегодня наиболее распространенным является UTF-8. Этот формат определяет следующие правила преобразования каждого кода Unicode в набор байтов (от одного до трех), пригодных для транспортировки Интернет-протоколами.


Здесь x,y,z обозначают биты исходного кода, которые должны извлекаться, начиная с младшего, и заноситься в байты результата справа налево, пока не будут заполнены все указанные позиции.

Дальнейшее развитие стандарта Unicode связано с добавлением новых языковых плоскостей, т.е. символов в диапазонах 10000 - 1FFFF, 20000 - 2FFFF и т.д., куда предполагается включать кодировку для письменностей мертвых языков, не попавших в таблицу, приведенную выше. Для кодирования этих дополнительных символов был разработан новый формат UTF-16.

Таким образом, существует 4 основных способа кодировки байтами в формате Unicode:

UTF-8: 128 символов кодируются одним байтом (формат ASCII), 1920 символов кодируются 2-мя байтами ((Roman, Greek, Cyrillic, Coptic, Armenian, Hebrew, Arabic символы), 63488 символов кодируются 3-мя байтами (Китайский, японский и др.) Оставшиеся 2 147 418 112 символы (еще не использованы) могут быть закодированы 4, 5 или 6-ю байтами.

UCS-2: Каждый символ представлен 2-мя байтами. Данная кодировка включает лишь первые 65 535 символов из формата Unicode.

UTF-16:Является расширением UCS-2, включает 1 114 112 символов формата Unicode. Первые 65 535 символов представлены 2-мя байтами, остальные - 4-мя байтами.

USC-4: Каждый символ кодируется 4-мя байтами.

Поскольку в ряде компьютерных систем (например, Windows NT ) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых 65 536 позиций (так называемая англ. basic multilingual plane, BMP ). Остальное пространство используется для «дополнительных символов» (англ. supplementary characters ): систем письма вымерших языков или очень редко используемых китайских иероглифов, математических и музыкальных символов.

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

Поскольку в UTF-16 можно отобразить только 2 20 +2 16 −2048 (1 112 064) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода.

Хотя кодовая область Юникода была расширена за пределы 2 16 уже в версии 2.0, первые символы в «верхней» области были размещены только в версии 3.1.

Роль этой кодировки в веб-секторе постоянно растёт, на начало 2010 доля веб-сайтов, использующих Юникод, составила около 50 %.

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

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

  • 1.1 (соответствует стандарту ISO/IEC 10646-1:), стандарт 1991-1995 годов.
  • 2.0, 2.1 (тот же стандарт ISO/IEC 10646-1:1993 плюс дополнения: «Amendments» с 1-го по 7-е и «Technical Corrigenda» 1 и 2), стандарт 1996 года.
  • 3.0 (стандарт ISO/IEC 10646-1:2000), стандарт 2000 года.
  • 3.1 (стандарты ISO/IEC 10646-1:2000 и ISO/IEC 10646-2:2001), стандарт 2001 года.
  • 3.2, стандарт 2002 года .
  • 4.0, стандарт .
  • 4.01, стандарт .
  • 4.1, стандарт .
  • 5.0, стандарт .
  • 5.1, стандарт .
  • 5.2, стандарт .
  • 6.0, стандарт .
  • 6.1, стандарт .
  • 6.2, стандарт .

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

Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 2 31 (2 147 483 648) кодовых позиций, было принято решение использовать лишь 1 112 064 для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно - сегодня (в версии 6.0) используется чуть менее 110 000 кодовых позиций (109 242 графических и 273 прочих символов).

Кодовое пространство разбито на 17 плоскостей по 2 16 (65536) символов. Нулевая плоскость называется базовой , в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая - для редко используемых иероглифов ККЯ , третья зарезервирована для архаичных китайских иероглифов . Плоскости 15 и 16 выделены для частного употребления.

Для обозначения символов Unicode используется запись вида «U+xxxx » (для кодов 0…FFFF), или «U+xxxxx » (для кодов 10000…FFFFF), или «U+xxxxxx » (для кодов 100000…10FFFF), где xxx - шестнадцатеричные цифры. Например, символ «я» (U+044F) имеет код 044F = 1103 .

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

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

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

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

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

Юникод - это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character).

Модифицирующие символы

Представление символа «Й» (U+0419) в виде базового символа «И» (U+0418) и модифицирующего символа « ̆» (U+0306)

Графические символы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в строке . К ним относятся, в частности, знаки ударения и прочие диакритические знаки . Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми (англ. base characters ), а непротяжённые - модифицирующими (англ. combining characters ); причём последние не могут встречаться самостоятельно. Например, символ «á» может быть представлен как последовательность базового символа «a» (U+0061) и модифицирующего символа « ́» (U+0301) или как монолитный символ «á» (U+00C1).

Особый тип модифицирующих символов - селекторы варианта начертания (англ. variation selectors ). Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного монгольского алфавита и для символов монгольского квадратного письма .

Формы нормализации

Поскольку одни и те же символы можно представить различными кодами, что иногда затрудняет обработку, существуют процессы нормализации, предназначенные для приведения текста к определённому стандартному виду.

В стандарте Юникода определены 4 формы нормализации текста:

  • Форма нормализации D (NFD) - каноническая декомпозиция. В процессе приведения текста в эту форму все составные символы рекурсивно заменяются на несколько составных, в соответствии с таблицами декомпозиции.
  • Форма нормализации C (NFC) - каноническая декомпозиция с последующей канонической композицией. Сначала текст приводится к форме D, после чего выполняется каноническая композиция - текст обрабатывается от начала к концу и выполняются следующие правила:
    • Символ S является начальным , если он имеет нулевой класс модификации в базе символов Юникода.
    • В любой последовательности символов, стартующей с начального символа S, символ C блокируется от S, если и только если между S и C есть какой-либо символ B, который или является начальным, или имеет одинаковый или больший класс модификации, чем C. Это правило распространяется только на строки, прошедшие каноническую декомпозицию.
    • Первичным композитом считается символ, у которого есть каноническая декомпозиция в базе символов Юникода (или каноническая декомпозиция для хангыля и он не входит в список исключений).
    • Символ X может быть первично совмещён с символом Y, если и только если существует первичный композит Z, канонически эквивалентный последовательности .
    • Если очередной символ C не блокируется последним встреченным начальным базовым символом L и он может быть успешно первично совмещён с ним, то L заменяется на композит L-C, а C удаляется.
  • Форма нормализации KD (NFKD) - совместимая декомпозиция. При приведении в эту форму все составные символы заменяются, используя как канонические карты декомпозиции Юникода, так и совместимые карты декомпозиции, после чего результат ставится в каноническом порядке.
  • Форма нормализации KC (NFKC) - совместимая декомпозиция с последующей канонической композицией.

Термины «композиция» и «декомпозиция» понимают под собой соответственно соединение или разложение символов на составные части.

Примеры

Исходный текст NFD NFC NFKD NFKC
Français Franc\u0327ais Fran\xe7ais Franc\u0327ais Fran\xe7ais
А, Ё, Й \u0410, \u0401, \u0419 \u0410, \u0415\u0308, \u0418\u0306 \u0410, \u0401, \u0419
\u304b\u3099 \u304c \u304b\u3099 \u304c
Henry IV Henry IV Henry IV Henry IV Henry IV
Henry Ⅳ Henry \u2163 Henry \u2163 Henry IV Henry IV

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

Стандарт Юникод поддерживает письменности языков как с направлением написания слева направо (англ. left-to-right, LTR ), так и с написанием справа налево (англ. right-to-left, RTL ) - например, арабское и еврейское письмо. В обоих случаях символы хранятся в «естественном» порядке; их отображение с учётом нужного направления письма обеспечивается приложением.

Кроме того, Юникод поддерживает комбинированные тексты, сочетающие фрагменты с разным направлением письма. Данная возможность называется двунаправленность (англ. bidirectional text, BiDi ). Некоторые упрощённые обработчики текста (например, в сотовых телефонах) могут поддерживать Юникод, но не иметь поддержки двунаправленности. Все символы Юникода поделены на несколько категорий: пишущиеся слева направо, пишущиеся справа налево, и пишущиеся в любом направлении. Символы последней категории (в основном это знаки пунктуации) при отображении принимают направление окружающего их текста.

Представленные символы

Юникод включает практически все современные письменности , в том числе:

и другие.

С академическими целями добавлены многие исторические письменности, в том числе: руны , древнегреческая , египетские иероглифы , клинопись , письменность майя , этрусский алфавит .

В Юникоде представлен широкий набор математических и музыкальных символов, а также пиктограмм .

Однако в Юникод принципиально не включаются логотипы компаний и продуктов, хотя они и встречаются в шрифтах (например, логотип Apple в кодировке MacRoman (0xF0) или логотип Windows в шрифте Wingdings (0xFF)). В юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов.

ISO/IEC 10646

Консорциум Юникода работает в тесной связи с рабочей группой ISO/IEC/JTC1/SC2/WG2, которая занимается разработкой международного стандарта 10646 (ISO /IEC 10646). Между стандартом Юникода и ISO/IEC 10646 установлена синхронизация, хотя каждый стандарт использует свою терминологию и систему документации.

Сотрудничество Консорциума Юникода с Международной организацией по стандартизации (англ. International Organization for Standardization, ISO ) началось в 1991 году . В 1993 году ISO выпустила стандарт DIS 10646.1. Для синхронизации с ним Консорциум утвердил стандарт Юникода версии 1.1, в который были внесены дополнительные символы из DIS 10646.1. В результате значения закодированных символов в Unicode 1.1 и DIS 10646.1 полностью совпали.

В дальнейшем сотрудничество двух организаций продолжилось. В 2000 году стандарт Unicode 3.0 был синхронизирован с ISO/IEC 10646-1:2000. Предстоящая третья версия ISO/IEC 10646 будет синхронизирована с Unicode 4.0. Возможно, эти спецификации даже будут опубликованы как единый стандарт.

Аналогично форматам UTF-16 и UTF-32 в стандарте Юникода, стандарт ISO/IEC 10646 также имеет две основные формы кодирования символов: UCS-2 (2 байта на символ, аналогично UTF-16) и UCS-4 (4 байта на символ, аналогично UTF-32). UCS значит универсальный многооктетный (многобайтовый) кодированный набор символов (англ. universal multiple-octet coded character set ). UCS-2 можно считать подмножеством UTF-16 (UTF-16 без суррогатных пар), а UCS-4 является синонимом для UTF-32.

Способы представления

Юникод имеет несколько форм представления (англ. Unicode transformation format, UTF ): UTF-8 , UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт. 1 апреля 2005 года были предложены две шуточные формы представления: UTF-9 и UTF-18 (RFC 4042).

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

Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности.

Порядок байтов

В потоке данных UTF-16 старший байт может записываться либо перед младшим (англ. UTF-16 big-endian ), либо после младшего (англ. UTF-16 little-endian ). Аналогично существует два варианта четырёхбайтной кодировки - UTF-32BE и UTF-32LE.

Для определения формата представления Юникода в начало текстового файла записывается сигнатура - символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. byte order mark, BOM ). Это позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также этот способ иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов. Файлы, следующие этому соглашению, начинаются с таких последовательностей байтов:

UTF-8 EF BB BF UTF-16BE FE FF UTF-16LE FF FE UTF-32BE 00 00 FE FF UTF-32LE FF FE 00 00

К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).

Файлы в кодировках UTF-16 и UTF-32, не содержащие BOM, должны иметь порядок байтов big-endian (unicode.org).

Юникод и традиционные кодировки

Внедрение Юникода привело к изменению подхода к традиционным 8-битным кодировкам. Если раньше кодировка задавалась шрифтом, то теперь она задаётся таблицей соответствия между данной кодировкой и Юникодом. Фактически 8-битные кодировки превратились в форму представления некоторого подмножества Юникода. Это намного упростило создание программ, которые должны работать с множеством разных кодировок: теперь, чтобы добавить поддержку ещё одной кодировки, надо всего лишь добавить ещё одну таблицу перекодировки в Юникод.

Кроме того, многие форматы данных позволяют вставлять любые символы Юникода, даже если документ записан в старой 8-битной кодировке. Например, в HTML можно использовать коды с амперсандом .

Реализации

Большинство современных операционных систем в той или иной степени обеспечивают поддержку Юникода.

Одной из первых успешных коммерческих реализаций Юникода стала среда программирования Java . В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.

Методы ввода

Консоль GNU/Linux также допускает ввод символа Юникода по его коду - для этого десятичный код символа нужно ввести цифрами расширенного блока клавиатуры при зажатой клавише Alt. Можно вводить символы и по их шестнадцатеричному коду: для этого нужно зажать клавишу AltGr, и для ввода цифр A-F использовать клавиши расширенного блока клавиатуры от NumLock до Enter (по часовой стрелке). Поддерживается также и ввод в соответствии с ISO 14755. Для того чтобы перечисленные способы могли работать, нужно включить в консоли режим Юникода вызовом unicode_start (1) и выбрать подходящий шрифт вызовом setfont (8).

Написание «Юникод» уже твёрдо вошло в русскоязычные тексты. Согласно «Яндексу », частота использования этого слова примерно в 11 раз превышает «Уникод» . В Википедии используется более распространённый вариант.

На сайте Консорциума есть специальная страница, где рассматриваются проблемы передачи слова «Unicode» в различных языках и системах письма. Для русской кириллицы указан вариант «Юникод» .

Формы, принятые иностранными организациями для русской передачи слова «Unicode», являются рекомендательными.

См. также

  • Проект:Внесение символов алфавитов народов России в Юникод

Примечания

  1. Unicode Transcriptions (англ.) . Архивировано из первоисточника 22 августа 2011. Проверено 10 мая 2010.
  2. Уникод в словаре Paratype
  3. The Unicode® Standard: A Technical Introduction . Архивировано
  4. History of Unicode Release and Publication Dates . Архивировано из первоисточника 22 августа 2011. Проверено 4 июля 2010.
  5. The Unicode Consortium . Архивировано из первоисточника 22 августа 2011. Проверено 4 июля 2010.
  6. Foreword . Архивировано из первоисточника 22 августа 2011. Проверено 4 июля 2010.
  7. General Structure . Архивировано из первоисточника 22 августа 2011. Проверено 5 июля 2010.
  8. European Alphabetic Scripts . Архивировано из первоисточника 22 августа 2011. Проверено 4 июля 2010.
  9. Unicode 88 . Архивировано из первоисточника 22 августа 2011. Проверено 8 июля 2010.
  10. Unicode and Microsoft Windows NT (англ.) . Microsoft Support . Архивировано
  11. Unicode используется почти на 50% веб-сайтов (рус.) . Архивировано из первоисточника 22 августа 2011.
  12. Roadmap to the TIP (Tertiary Ideographic Plane)
  13. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (англ.)
  14. Регистр в Unicode - это непросто
  15. В большинстве шрифтов для ПК реализованы «прописные» (маюскульные) моноширинные цифры.
  16. В некоторых случаях документ (не простой текст) в Юникоде может занимать существенно меньше места, чем документ в однобайтовой кодировке. Например, если некая веб-страница содержит примерно поровну русского и греческого текста, то в однобайтовой кодировке придётся либо русские, либо греческие буквы записывать, используя возможности формата документов, в виде кодов с амперсандом, которые занимают 6-7 байт на символ (при использовании десятичных кодов), т. е. в среднем на букву придётся 3,5-4 байта, в то время как UTF-8 занимает только 2 байта на греческую или русскую букву.
  17. Один из файлов шрифтов Arial Unicode имеет размер 24 мегабайта; существует Times New Roman размером 120 мегабайт, он содержит количество символов, близкое к 65536.
  18. Даже для самого современного и дорогого мобильного телефона затруднительно выделить 120 Мбайт памяти для полного Юникод-шрифта. На практике использование полных шрифтов требуется редко.
  19. 350 тыс. страниц «Юникод » против 31 тыс. страниц «Уникод ».

Ссылки

  • Официальный сайт Консорциума Юникода (англ.)
  • Unicode в каталоге ссылок Open Directory Project (dmoz). (англ.)
  • Что такое Unicode? (рус.)
  • Последняя версия стандарта Юникод (англ.)
  • Таблица символов Юникода с названиями и описаниями (рус.) (англ.)
  • Связь Юникода и ISO/IEC 10646 (файл PDF) (англ.)
  • FAQ по UTF-8 и Unicode (англ.)
  • Кириллица в Юникоде:

(коды от 0 до 127), т.е. одним байтом кодируются латинские буквы, цифры и специальные символы. Русские буквы (кириллица) представляются 16-битными (двухбайтными) кодами:

110XXXXX 10XXXXXX,

где X обозначены двоичные разряды для размещения кода символа в соответствии с таблицей UNICODE .

Юникод (англ. Unicode) - стандарт кодирования символов, позволяющий представить знаки почти всех письменных языков. Представляемые в юникоде символы кодируются целыми числами без знака. Эти числа будем называть кодами символов в юникоде или просто UNICODE . Юникод имеет несколько форм представления символов в компьютере: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE) . (Англ. Unicode transformation format - UTF).

Рассмотрим, как кодируется в UTF-8 буква Ж . Её UNICODE - 1046 10 или 0416 16 или 10000 010110 2 . UNICODE в двоичном виде разбивается на две части: пять левых бит и шесть правых. Левая часть дополняется до байта признаком 110 двухбайтного кода UTF-8 : 110 10000. К правой части приписываются два бита 10 признака продолжения многобайтного кода: 10 010110. Окончательно код буквы Ж в UTF-8 выглядит так:

110 10000 10 010110 2
или D0 96 16

Таким образом, русская буква кодируется дважды: сначала в 11-битный UNICODE , а затем - в 16-битный UTF-8.

В приведённой ниже таблице, кроме кодов UNICODE и UTF-8 в шестнадцатиричной системе счисления, даны коды UTF-8 в десятичной системе счисления и для сравнения коды кириллицы в кодировке CP-1251 , иначе называемой windovs-1251 .

Таблица кодов кириллицы в UTF-8
Символ UNICODE UTF-8 CP-1251
Шестн. Десят Шестн. Десят
А 0410 1040 D090 208 144 192
Б 0411 1041 D091 208 145 193
В 0412 1042 D092 208 146 194
Г 0413 1043 D093 208 147 195
Д 0414 1044 D094 208 148 196
Е 0415 1045 D095 208 149 197
Ж 0416 1046 D096 208 150 198
З 0417 1047 D097 208 151 199
И 0418 1048 D098 208 152 200
Й 0419 1049 D099 208 153 201
К 041A 1050 D09A 208 154 202
Л 041B 1051 D09B 208 155 203
М 041C 1052 D09C 208 156 204
Н 041D 1053 D09D 208 157 205
О 041E 1054 D09E 208 158 206
П 041F 1055 D09F 208 159 207
Р 0420 1056 D0A0 208 160 208
С 0421 1057 D0A1 208 161 209
Т 0422 1058 D0A2 208 162 210
У 0423 1059 D0A3 208 163 211
Ф 0424 1060 D0A4 208 164 212
Х 0425 1061 D0A5 208 165 213
Ц 0426 1062 D0A6 208 166 214
Ч 0427 1063 D0A7 208 167 215
Ш 0428 1064 D0A8 208 168 216
Щ 0429 1065 D0A9 208 169 217
Ъ 042A 1066 D0AA 208 170 218
Ы 042B 1067 D0AB 208 171 219
Ь 042C 1068 D0AC 208 172 220
Э 042D 1069 D0AD 208 173 221
Ю 042E 1070 D0AE 208 174 222
Я 042F 1071 D0AF 208 175 223
а 0430 1072 D0B0 208 176 224
б 0431 1073 D0B1 208 177 225
в 0432 1074 D0B2 208 178 226
г 0433 1075 D0B3 208 179 227
д 0434 1076 D0B4 208 180 228
е 0435 1077 D0B5 208 181 229
ж 0436 1078 D0B6 208 182 230
з 0437 1079 D0B7 208 183 231
и 0438 1080 D0B8 208 184 232
й 0439 1081 D0B9 208 185 233
к 043A 1082 D0BA 208 186 234
л 043B 1083 D0BB 208 187 235
м 043C 1084 D0BC 208 188 236
н 043D 1085 D0BD 208 189 237
о 043E 1086 D0BE 208 190 238
п 043F 1087 D0BF 208 191 239
р 0440 1088 D180 209 128 240
с 0441 1089 D181 209 129 241
т 0442 1090 D182 209 130 242
у 0443 1091 D183 209 131 243
ф 0444 1092 D184 209 132 244
х 0445 1093 D185 209 133 245
ц 0446 1094 D186 209 134 246
ч 0447 1095 D187 209 135 247
ш 0448 1096 D188 209 136 248
щ 0449 1097 D189 209 137 249
ъ 044A 1098 D18A 209 138 250
ы 044B 1099 D18B 209 139 251
ь 044C 1100 D18C 209 140 252
э 044D 1101 D18D 209 141 253
ю 044E 1102 D18E 209 142 254
я 044F 1103 D18F 209 143 255
Символы вне общего правила
Ё 0401 1025 D001 208 101 168
ё 0451 1025 D191 209 145 184