Вики-текст старой страницы до правки (old_wikitext ) | '[[Файл:Unicode logo.gif|right|Unicode Consortium]]
'''Юнико́д'''<ref name=autogenerated1>{{cite web|url=http://www.unicode.org/standard/UnicodeTranscriptions.html|title=Unicode Transcriptions|publisher=|date=|accessdate=10 мая 2010|lang=en}}</ref> или '''Унико́д'''<ref>[http://www.paratype.ru/help/term/terms.asp?code=361 Уникод в словаре Paratype]</ref> ({{lang-en|Unicode}}) — стандарт [[Набор символов|кодирования символов]], позволяющий представить знаки практически всех письменных [[язык]]ов.<ref name='unicode-techintro'>{{cite web|url=http://www.unicode.org/standard/principles.html|title=The Unicode® Standard: A Technical Introduction|accessdate=2010-07-04}}</ref>
Стандарт предложен в [[1991 год]]у некоммерческой организацией «Консорциум Юникода» ({{lang-en|Unicode Consortium, Unicode Inc.}}).<ref>{{cite web|url=http://www.unicode.org/history/publicationdates.html|title=History of Unicode Release and Publication Dates|accessdate=2010-07-04}}</ref><ref>{{cite web|url=http://www.unicode.org/consortium/consort.html|title=The Unicode Consortium|accessdate=2010-07-04}}</ref> Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские [[иероглиф]]ы, математические символы, буквы [[греческий алфавит|греческого алфавита]], [[латинский алфавит|латиницы]] и [[кириллица|кириллицы]], при этом становится ненужным переключение [[кодовая страница|кодовых страниц]].<ref name='unicode-foreword'>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/Foreword.pdf|title=Foreword|accessdate=2010-07-04}}</ref>
Стандарт состоит из двух основных разделов: универсальный набор символов ({{lang-en|UCS, universal character set}}) и семейство кодировок ({{lang-en|UTF, Unicode transformation format}}). Универсальный набор символов задаёт однозначное соответствие символов [[код]]ам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора [[ASCII]] с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем.<ref name='unicode-02'>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/ch02.pdf|title=General Structure|accessdate=2010-07-05}}</ref> Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F (см. [[Кириллица в Юникоде]]).<ref>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/ch07.pdf|title=European Alphabetic Scripts|accessdate=2010-07-04}}</ref>
== Предпосылки создания и развитие Юникода ==
К концу [[1980-е|1980-х годов]] стандартом стали 8-битные символы, при этом существовало множество разных 8-битных кодировок, и постоянно появлялись всё новые. Это объяснялось как постоянным расширением круга поддерживаемых языков, так и стремлением создать кодировку, частично совместимую с какой-нибудь другой (характерный пример — появление [[альтернативная кодировка|альтернативной кодировки]] для русского языка, обусловленное эксплуатацией западных программ, созданных для кодировки [[CP437]]). В результате появилась необходимость решения нескольких задач:
# Проблема «[[кракозябры|кракозябр]]» (отображения документов в неправильной кодировке):<ref name='unicode-foreword' /> её можно было решить либо последовательным внедрением методов указания используемой кодировки, либо внедрением единой для всех кодировки.
# Проблема ограниченности набора символов:<ref name='unicode-foreword' /> её можно было решить либо переключением шрифтов внутри документа, либо внедрением «широкой» кодировки. Переключение шрифтов издавна практиковалось в [[текстовый процессор|текстовых процессорах]], причём часто использовались [[нестандартные шрифты|шрифты с нестандартной кодировкой]], т. н. «dingbat fonts» — в итоге при попытке перенести документ в другую систему все нестандартные символы превращались в кракозябры.
# Проблема преобразования одной кодировки в другую: её можно было решить либо составлением таблиц перекодировки для каждой пары кодировок, либо использованием промежуточного преобразования в третью кодировку, включающую все символы всех кодировок.<ref>{{cite web|url=http://www.unicode.org/history/unicode88.pdf|title=Unicode 88|accessdate=2010-07-08}}</ref>
# Проблема дублирования шрифтов: традиционно для каждой кодировки делался свой шрифт, даже если эти кодировки частично (или полностью) совпадали по набору символов: эту проблему можно было решить, делая «большие» шрифты, из которых потом выбираются нужные для данной кодировки символы — однако это требует создания единого реестра символов, чтобы определять, чему что соответствует.
Было признано необходимым создание единой «широкой» кодировки. Кодировки с переменной длиной символа, широко использующиеся в Восточной Азии, были признаны слишком сложными в использовании, поэтому было решено использовать символы фиксированной ширины. Использование 32-битных символов казалось слишком расточительным, поэтому было решено использовать 16-битные.
Таким образом, первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 2<sup>16</sup> (65 536). Отсюда происходит практика обозначения символов четырьмя шестнадцатеричными цифрами (например, U+0410). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. Редко используемые символы должны были размещаться в «области символов для частного использования» ({{lang|en|Private Use Area}}), которая первоначально занимала коды U+D800…U+F8FF. Чтобы использовать Юникод также и в качестве промежуточного звена при преобразовании разных кодировок друг в друга, в него включили все символы, представленные во всех наиболее известных кодировках.
В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим, коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. [[#Способы представления|Способы представления]]).
Поскольку в ряде компьютерных систем (например, [[Windows NT]]<ref name="windows-nt">{{cite web|url=http://support.microsoft.com/kb/99884|title=Unicode and Microsoft Windows NT|work=Microsoft Support|lang=en}}</ref>) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых 65 536 позиций (так называемая {{lang-en|basic multilingual plane, BMP}}). Остальное пространство используется для «дополнительных символов» ({{lang-en|supplementary characters}}): систем письма вымерших языков или очень редко используемых [[китай]]ских иероглифов, математических и музыкальных символов.
Для совместимости со старыми 16-битными системами была изобретена система [[UTF-16]], где первые 65 536 позиций, за исключением позиций из интервала U+D800…U+DFFF, отображаются непосредственно как 16-битные числа, а остальные представляются в виде «суррогатных пар» (первый элемент пары из области U+D800…U+DBFF, второй элемент пары из области U+DC00…U+DFFF). Для суррогатных пар была использована часть кодового пространства (2048 позиций), ранее отведённого для «символов для частного использования».
Поскольку в UTF-16 можно отобразить только 2<sup>20</sup>+2<sup>16</sup>−2048 ({{formatnum:1112064}}) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода.
Хотя кодовая область Юникода была расширена за пределы 2<sup>16</sup> уже в версии 2.0, первые символы в «верхней» области были размещены только в версии 3.1.
Роль этой кодировки в веб-секторе постоянно растёт, на начало 2010 доля веб-сайтов, использующих Юникод, составила около 50 %.<ref>{{cite web|url=http://w3pro.ru/news/unicode-ispolzuetsya-pochti-na-50-veb-saitov|title=Unicode используется почти на 50% веб-сайтов|lang=ru}}</ref>
== Версии Юникода ==
По мере изменения и пополнения таблицы символов системы Юникода и выхода новых версий этой системы, — а эта работа ведётся постоянно, поскольку изначально система Юникод включала только Plane 0 — двухбайтные коды, — выходят и новые документы [[ISO]]. Система Юникод существует в общей сложности в следующих версиях:
* 1.1 (соответствует стандарту ISO/IEC 10646—1:[[1993]]), стандарт 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.2, стандарт [[2002 год]]а.
* 4.0, стандарт [[2003]].
* 4.01, стандарт [[2004]].
* 4.1, стандарт [[2005]].
* 5.0, стандарт [[2006]].
* 5.1, стандарт [[2008]].
* 5.2, стандарт [[2009]].
* 6.0, стандарт [[2010]].
== Кодовое пространство ==
Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 2<sup>31</sup> ({{formatnum:2147483648}}) кодовых позиций, было принято решение использовать лишь {{formatnum:1112064}} для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно — сегодня (в версии 6.0) используется чуть менее {{formatnum:110000}} кодовых позиций ({{formatnum:109242}} графических и 273 прочих символов).
Кодовое пространство разбито на 17 ''плоскостей'' по 2<sup>16</sup> (65536) символов. Нулевая плоскость называется ''базовой'', в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая — для редко используемых иероглифов ККЯ, третья зарезервирована для архаичных китайских иероглифов<ref>[http://unicode.org/roadmaps/tip/ Roadmap to the TIP (Tertiary Ideographic Plane)]</ref>. Плоскости 15 и 16 выделены для частного употребления.<ref name='unicode-02' />
Для обозначения символов Unicode используется запись вида «U+''xxxx''» (для кодов 0…FFFF), или «U+''xxxxx''» (для кодов 10000…FFFFF), или «U+''xxxxxx''» (для кодов 100000…10FFFF), где ''xxx'' — [[шестнадцатеричная система счисления|шестнадцатеричные]] цифры. Например, символ «я» (U+044F) имеет код 044F<sub>[[шестнадцатеричная система счисления|16]]</sub> = 1103<sub>[[десятичная система счисления|10]]</sub>.
== Система кодирования ==
Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для [[компьютер]]ной обработки текстовых данных.
Графические символы — это символы, имеющие видимое изображение. Графическим символам противопоставляются управляющие символы и символы форматирования.
Графические символы включают в себя следующие группы:
* буквы, содержащиеся хотя бы в одном из обслуживаемых [[алфавит]]ов;
* цифры;
* знаки пунктуации;
* специальные знаки ([[математика|математические]], технические, [[идеограмма|идеограммы]] и пр.);
* разделители.
Юникод — это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character).
== Модифицирующие символы ==
[[Файл:Diacritic-j.png|right|thumb|Представление символа «Й» (U+0419) в виде базового символа «И» (U+0418) и модифицирующего символа « ̆» (U+0306)]]
Графические символы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в [[строка|строке]]. К ним относятся, в частности, знаки ударения и прочие [[диакритические знаки]]. Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми ({{lang-en|base characters}}), а непротяжённые — модифицирующими ({{lang-en|combining characters}}); причём последние не могут встречаться самостоятельно. Например, символ «á» может быть представлен как последовательность базового символа «a» (U+0061) и модифицирующего символа « ́» (U+0301) или как монолитный символ «á» (U+00C1).
Особый тип модифицирующих символов — селекторы варианта начертания ({{lang-en|variation selectors}}). Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного [[монгольский алфавит|монгольского алфавита]] и для символов [[Монгольское квадратное письмо|монгольского квадратного письма]].
== Формы нормализации ==
Поскольку одни и те же символы можно представить различными кодами, что иногда затрудняет обработку, существуют процессы нормализации, предназначенные для приведения текста к определённому стандартному виду.
В стандарте Юникода определены 4 формы нормализации текста:
* Форма нормализации D (NFD) — каноническая декомпозиция. В процессе приведения текста в эту форму все составные символы рекурсивно заменяются на несколько составных, в соответствии с таблицами декомпозиции.
* Форма нормализации C (NFC) — каноническая декомпозиция с последующей канонической композицией. Сначала текст приводится к форме D, после чего выполняется каноническая композиция — текст обрабатывается от начала к концу и выполняются следующие правила:
** Символ S является ''начальным'', если он имеет нулевой класс модификации <!-- combining class of zero --> в базе символов Юникода.
** В любой последовательности символов, стартующей с начального символа S, символ C блокируется от S, если и только если между S и C есть какой-либо символ B, который или является начальным, или имеет одинаковый или больший класс модификации, чем C. Это правило распространяется только на строки, прошедшие каноническую декомпозицию.
** ''Первичным'' композитом считается символ, у которого есть каноническая декомпозиция в базе символов Юникода (или каноническая декомпозиция для [[Хангыль|хангыля]] и он не входит в [http://www.unicode.org/unicode/reports/tr15/#Primary_Exclusion_List_Table список исключений]).
** Символ X может быть первично совмещён с символом Y если и только если существует первичный композит Z, канонически эквивалентный последовательности <X, Y>.
** Если очередной символ C не блокируется последним встреченным начальным базовым символом L, и он может быть успешно первично совмещён с ним, то L заменяется на композит L-C, а C удаляется.
* Форма нормализации KD (NFKD) — совместимая декомпозиция. При приведении в эту форму все составные символы заменяются используя как канонические карты декомпозиции Юникода, так и совместимые карты декомпозиции, после чего результат ставится в каноническом порядке.
* Форма нормализации KC (NFKC) — совместимая декомпозиция с последующей ''канонической'' композицией.
Термины «композиция» и «декомпозиция» понимают под собой соответственно соединение или разложение символов на составные части.
=== Примеры ===
{| class="standard"
!Исходный текст||NFD||NFC||NFKD||NFKC
|-
|Français (<code>Fran\xe7ais</code>)||<code>Franc\u0327ais</code>||<code>Fran\xe7ais</code>||<code>Franc\u0327ais</code>||<code>Fran\xe7ais</code>
|-
|А, Ё, Й (<code>\u0410, \u0401, \u0419</code>)||<code>\u0410, \u0415\u0308, \u0418\u0306</code>||<code>\u0410, \u0401, \u0419</code>||<code>\u0410, \u0415\u0308, \u0418\u0306</code>||<code>\u0410, \u0401, \u0419</code>
|-
|が (<code>\u304c</code>)||<code>\u304b\u3099</code>||<code>\u304c</code>||<code>\u304b\u3099</code>||<code>\u304c</code>
|-
|Henry IV||<code>Henry IV</code>||<code>Henry IV</code>||<code>Henry IV</code>||<code>Henry IV</code>
|-
|Henry Ⅳ (<code>Henry \u2163</code>)||<code>Henry \u2163</code>||<code>Henry \u2163</code>||<code>Henry IV</code>||<code>Henry IV</code>
|}
== Двунаправленное письмо ==
Стандарт Юникод поддерживает письменности языков как с направлением написания слева направо ({{lang-en|left-to-right, LTR}}), так и с написанием справа налево ({{lang-en|right-to-left, RTL}}) — например, [[арабское письмо|арабское]] и [[еврейский алфавит|еврейское]] письмо. В обоих случаях символы хранятся в «естественном» порядке; их отображение с учётом нужного направления письма обеспечивается приложением.
Кроме того, Юникод поддерживает комбинированные тексты, сочетающие фрагменты с разным направлением письма. Данная возможность называется ''двунаправленность'' ({{lang-en|bidirectional text, BiDi}}). Некоторые упрощённые обработчики текста (например, в сотовых телефонах) могут поддерживать Юникод, но не иметь поддержки двунаправленности. Все символы Юникода поделены на несколько категорий: пишущиеся слева направо, пишущиеся справа налево, и пишущиеся в любом направлении. Символы последней категории (в основном это [[знаки пунктуации]]) при отображении принимают направление окружающего их текста.
== Представленные символы ==
{{Main|Символы, представленные в Юникоде}}
[[Файл:Roadmap to Unicode BMP.svg|right|273px|thumb|Схема базовой плоскости Unicode, см. [[Символы, представленные в Юникоде#Базовая многоязыковая плоскость|описание]]]]
Юникод включает практически все современные [[письменность|письменности]], в том числе:
{{columns-list|4|
* [[арабское письмо|арабскую]],
* [[армянское письмо|армянскую]],
* [[бенгальское письмо|бенгальскую]],
* [[Бирманское письмо|бирманскую]],
* [[Глаголица|глаголицу]]
* [[Греческий алфавит|греческую]],
* [[грузинское письмо|грузинскую]],
* [[деванагари]],
* [[еврейский алфавит|еврейскую]],
* [[Кириллица|кириллицу]],
* [[китайское письмо|китайскую]] (китайские иероглифы активно используются в [[японский язык|японском языке]], а также достаточно редко в [[корейский язык|корейском]]),
* [[коптское письмо|коптскую]],
* [[Кхмерское письмо|кхмерскую]],
* [[Латинский алфавит|латинскую]],
* [[Тамильское письмо|тамильскую]],
* [[Хангыль|корейскую (хангыль)]],
* [[письмо чероки|чероки]],
* [[Эфиопское письмо|эфиопскую]],
* [[японское письмо|японскую]] (которая включает в себя кроме [[кандзи|китайских иероглифов]] ещё и [[кана|слоговую азбуку]]),
}}
и другие.
С академическими целями добавлены многие исторические письменности, в том числе: [[руны]], [[древнегреческий язык|древнегреческая]], [[египетские иероглифы]], [[клинопись]], [[письменность майя]], [[этрусский алфавит]].
В Юникоде представлен широкий набор [[таблица математических символов|математических]] и [[музыка]]льных символов, а также [[пиктограмма|пиктограмм]].
Однако в Юникод принципиально не включаются логотипы компаний и продуктов, хотя они и встречаются в шрифтах (например, логотип [[Apple]] в кодировке [[MacRoman]] (0xF0) или логотип [[Microsoft Windows|Windows]] в шрифте Wingdings (0xFF)). В юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов.
== ISO/IEC 10646 ==
Консорциум Юникода работает в тесной связи с рабочей группой ISO/IEC/JTC1/SC2/WG2, которая занимается разработкой международного стандарта 10646 ([[ISO]]/[[IEC]] 10646). Между стандартом Юникода и ISO/IEC 10646 установлена синхронизация, хотя каждый стандарт использует свою терминологию и систему документации.
Сотрудничество Консорциума Юникода с Международной организацией по стандартизации ({{lang-en|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 значит ''универсальный многооктетный'' (многобайтовый) ''кодированный набор символов'' ({{lang-en|universal multiple-octet coded character set}}). UCS-2 можно считать подмножеством UTF-16 (UTF-16 без суррогатных пар), а UCS-4 является синонимом для UTF-32.
== Способы представления ==
Юникод имеет несколько форм представления ({{lang-en|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 ([http://tools.ietf.org/html/rfc4042 RFC 4042]).
В [[Microsoft]] [[Windows NT]] и основанных на ней системах [[Windows 2000]] и [[Windows XP]] в основном [[юникод в операционных системах Microsoft|используется]] форма UTF-16LE. В [[UNIX]]-подобных [[Операционная система|операционных системах]] [[GNU/Linux]], [[BSD]] и [[Mac OS X]] принята форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в [[оперативная память|оперативной памяти]].
[[Punycode]] — другая форма кодирования последовательностей Unicode-символов в так называемые ACE-последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах.
=== UTF-8 ===
{{Основная статья|UTF-8}}
UTF-8 — представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст [[ASCII]]. И наоборот, в тексте UTF-8 любой [[байт]] со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид <code>11xxxxxx</code>, а остальные — <code>10xxxxxx</code>.
Формат UTF-8 был изобретён [[2 сентября]] [[1992 год]]а [[Томпсон, Кен|Кеном Томпсоном]] и [[Пайк, Роб|Робом Пайком]] и реализован в [[Plan 9]]<ref>http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt{{ref-en}}</ref>. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.
Символы UTF-8 получаются из Unicode [http://www.linuxdoc.ru/manpages/man7/utf-8.7.html следующим образом]:
<pre>
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
</pre>
Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности.
=== Порядок байтов ===
В потоке данных UTF-16 старший байт может записываться либо перед младшим ({{lang-en|UTF-16 big-endian}}), либо после младшего ({{lang-en|UTF-16 little-endian}}). Аналогично существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE.
Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый ''меткой порядка байтов'' ({{lang-en|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-16 и UTF-32, не содержащие BOM, должны иметь порядок байтов big-endian ([http://unicode.org/faq/utf_bom.html#gen6 unicode.org]).
К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).
=== Юникод и традиционные кодировки ===
Внедрение Юникода привело к изменению подхода к традиционным 8-битным кодировкам. Если раньше кодировка задавалась шрифтом, то теперь она задаётся таблицей соответствия между данной кодировкой и Юникодом. Фактически 8-битные кодировки превратились в форму представления некоторого подмножества Юникода. Это намного упростило создание программ, которые должны работать с множеством разных кодировок: теперь, чтобы добавить поддержку ещё одной кодировки, надо всего лишь добавить ещё одну таблицу перекодировки в Юникод.
Кроме того, многие форматы данных позволяют вставлять любые символы Юникода, даже если документ записан в старой 8-битной кодировке. Например, в HTML можно использовать [[Мнемоники в HTML|коды с амперсандом]].
=== Реализации ===
Большинство современных операционных систем в той или иной степени обеспечивают поддержку Юникода.
В операционных системах семейства [[Windows NT]] для внутреннего представления имён файлов и других системных строк используется двухбайтовая кодировка UTF-16LE. Системные вызовы, принимающие строковые параметры, существуют в однобайтном и двухбайтном вариантах. Подробнее см. в статье [[Юникод в операционных системах Microsoft]].
[[UNIX]]-подобные операционные системы, в том числе [[GNU/Linux]], [[BSD]], [[Mac OS X]], используют для представления Юникода кодировку UTF-8. Большинство программ могут работать с UTF-8 как с традиционными однобайтными кодировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно перекодируются в UCS-4, так что каждому символу соответствует [[машинное слово]].
Одной из первых успешных коммерческих реализаций Юникода стала среда программирования [[Java]]. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.
== Методы ввода ==
Поскольку ни одна [[раскладка клавиатуры]] не может позволить вводить все символы Юникода одновременно, от [[операционная система|операционных систем]] и [[прикладное программное обеспечение|прикладных программ]] требуется поддержка альтернативных методов ввода произвольных символов Юникода.
=== [[Microsoft Windows]] ===
{{Main|Юникод в операционных системах Microsoft}}
Начиная с [[Windows 2000]], служебная программа «Таблица символов» (charmap.exe) показывает все символы в ОС и позволяет копировать их в [[буфер обмена]]. Похожая таблица есть, например, в [[Microsoft Word]].
Иногда можно набрать [[Шестнадцатеричная система счисления|шестнадцатеричный]] код, нажать [[Alt (клавиша)|Alt]]+X, и код будет заменён на соответствующий символ, например, в [[WordPad]], Microsoft Word. В редакторах Alt+X выполняет и обратное преобразование.
Во многих программах MS Windows, чтобы получить символ Unicode, нужно при нажатой клавише Alt набрать десятичное значение кода символа на цифровой клавиатуре.
=== [[Macintosh]] ===
В [[Mac OS]] 8.5 и более поздних версиях поддерживается метод ввода, называемый «Unicode Hex Input». При зажатой клавише Option требуется набрать четырёхзначный шестнадцатеричный код требуемого символа. Этот метод позволяет вводить символы с кодами, большими U+FFFF, используя пары суррогатов; такие пары операционной системой будут автоматически заменены на одиночные символы. Этот метод ввода перед использованием нужно активизировать в соответствующем разделе системных настроек и затем выбрать как текущий метод ввода в меню клавиатуры.
Начиная с [[Mac OS X]] 10.2, существует также приложение «Character Palette», позволяющее выбирать символы из таблицы, в которой можно выделять символы определённого блока или символы, поддерживаемые конкретным шрифтом.
=== [[GNU/Linux]] ===
{{Main|Юникод в GNU/Linux}}
В [[GNOME]] также есть утилита «Таблица символов», позволяющая отображать символы определённого блока или системы письма и предоставляющая возможность поиска по названию или описанию символа. Когда код нужного символа известен, его можно ввести в соответствии со стандартом [[ISO]] 14755: при зажатых клавишах Ctrl и Shift ввести шестнадцатеричный код (начиная с некоторой версии GTK+ ввод кода нужно предварить нажатием клавиши ''«U»''). Вводимый шестнадцатеричный код может иметь до 32 бит в длину, позволяя вводить любые символы Юникода без использования суррогатных пар.
Все приложения [[X Window System|X Window]], включая GNOME и [[KDE]], поддерживают ввод при помощи клавиши Compose. Для клавиатур, на которых нет отдельной клавиши [[Compose]], для этой цели можно назначить любую клавишу — например, [[Caps Lock]].
Консоль GNU/Linux также допускает ввод символа Юникода по его коду — для этого десятичный код символа нужно ввести цифрами расширенного блока клавиатуры при зажатой клавише Alt. Можно вводить символы и по их шестнадцатеричному коду: для этого нужно зажать клавишу AltGr, и для ввода цифр A—F использовать клавиши расширенного блока клавиатуры от NumLock до Enter (по часовой стрелке). Поддерживается также и ввод в соответствии с ISO 14755. Для того чтобы перечисленные способы могли работать, нужно включить в консоли режим Юникода вызовом <tt>unicode_start</tt>(1) и выбрать подходящий шрифт вызовом <tt>setfont</tt>(8).
[[Mozilla Firefox]] для GNU/Linux поддерживает ввод символов по ISO 14755.
== Проблемы Юникода ==
Юникод не лишён недостатков (хотя, в основном, они связаны с возможностями обработчиков текста, а не непосредственно с принципом кодирования).
* Некоторые системы письма всё ещё не представлены должным образом в Юникоде. Изображение «длинных» надстрочных символов, простирающихся над несколькими буквами, как например, в [[церковнославянский язык|церковнославянском языке]], пока не реализовано.
* Тексты на [[китайский язык|китайском]], [[корейский язык|корейском]] и [[японский язык|японском]] языке имеют традиционное написание сверху вниз, начиная с правого верхнего угла. Переключение горизонтального и вертикального написания для этих языков не предусмотрено в Юникоде — это должно осуществляться средствами [[язык разметки|языков разметки]] или внутренними механизмами [[текстовый процессор|текстовых процессоров]].
* Первоначальная версия Юникода предполагала наличие большого количества готовых символов, в последующем было отдано предпочтение сочетанию букв с диакритическими модифицирующими знаками ({{lang-en|combining diacritics}}). Например, русские буквы Ё (U+0401) и Й (U+0419) существуют в виде монолитных символов, хотя могут быть представлены и набором базового символа с последующим [[диакритический знак|диакритическим знаком]], то есть в составной форме ({{lang-en|decomposed}}): Е+ ̈ (U+0415 U+0308), И+ ̆ (U+0418 U+0306). В то же время множество символов из языков с [[алфавиты на основе кириллицы|алфавитами на основе кириллицы]] не имеют монолитных форм.
* Юникод предусматривает возможность разных начертаний одного и того же символа в зависимости от языка. Так, [[китайское письмо|китайские иероглифы]] могут иметь разные начертания в китайском, японском ([[кандзи]]) и корейском ([[ханчча]]), но при этом в Юникоде обозначаться одним и тем же символом (так называемая CJK-унификация), хотя упрощённые и полные иероглифы всё же имеют разные коды. Часто возникают накладки, когда, например, японский текст выглядит «по-китайски». Аналогично, [[русский язык|русский]] и [[сербский язык]]и используют разное начертание курсивных букв ''п'' и ''т'' (в сербском они выглядят как <span style="text-decoration: overline; font-style: italic">и</span> и <span style="text-decoration: overline; font-style: italic">ш</span>, см. [[сербский курсив]]). Поэтому нужно следить, чтобы текст всегда был правильно помечен как относящийся к тому или другому языку.
* Даже перевод из строчных букв в заглавные зависит от языка. Например: в [[турецкий язык|турецком]] существуют буквы [[i без точки|İi и Iı]] — таким образом, турецкие правила изменения регистра конфликтуют с [[английский язык|английскими]], которые предписывают «i» переводить в «I».
* Файлы с текстом в Юникоде занимают больше места в памяти, так как один символ кодируется не одним байтом, как в различных национальных кодировках, а последовательностью байтов (исключение составляет UTF-8 для языков, алфавит которых укладывается в ASCII, а также наличие в тексте символов двух и более языков, алфавит которых ''не'' укладывается в ASCII<ref>В некоторых случаях текст в Юникоде может занимать существенно меньше места, чем текст в однобайтовой кодировке. Например, если некая веб-страница содержит примерно поровну русского и греческого текста, то в однобайтовой кодировке придётся либо русские, либо греческие буквы записывать в виде кодов с амперсандом, которые занимают 6—7 байт на символ (при использовании десятичных кодов), т. е. в среднем на букву придётся 3,5—4 байта, в то время как UTF-8 занимает только 2 байта на греческую или русскую букву.</ref>). Файл шрифта, необходимый для отображения всех символов таблицы Юникод, занимает сравнительно много места в памяти и требует бо́льших вычислительных ресурсов<ref>Один из файлов шрифтов Arial Unicode имеет размер 24 мегабайта; существует Times New Roman размером 120 мегабайт, он содержит количество символов, близкое к 65536.</ref>. С увеличением мощности компьютерных систем и удешевлением памяти и дискового пространства эта проблема становится всё менее существенной; тем не менее, она остаётся и в ближайшем будущем останется актуальной для портативных устройств, например, для мобильного телефона<ref>Даже для самого современного и дорогого мобильного телефона затруднительно выделить 120 Мбайт памяти для полного Юникод-шрифта. На практике использование полных шрифтов требуется редко.</ref>.
* Хотя поддержка Юникода реализована в наиболее распространённых операционных системах, до сих пор не всё прикладное программное обеспечение поддерживает корректную работу с ним. В частности, не всегда обрабатываются метки BOM, и плохо поддерживаются диакритические символы. Проблема является временной и есть следствие сравнительной новизны стандартов Юникода (в сравнении с однобайтовыми национальными кодировками).
* Производительность некоторых программ снижается при использовании Юникода вместо однобайтовых кодировок.
== «Юникод» или «Уникод»? ==
«Unicode» — одновременно и имя собственное (или часть имени, например, Unicode Consortium), и имя нарицательное, происходящее из английского языка.
На первый взгляд предпочтительнее использовать написание «Уникод». В [[русский язык|русском языке]] уже есть [[морфема|морфемы]] «уни-» (слова с латинским элементом «uni-» традиционно переводились и писались через «уни-»: универсальный, униполярный, унификация, униформа) и «код». Напротив, торговые марки, заимствованные из [[английский язык|английского языка]], обычно передаются посредством практической транскрипции, в которой деэтимологизированное сочетание букв «uni-» записывается в виде «юни-» («[[Юнилевер]]», «[[Юникс]]» и т. п.), то есть точно так же, как в случае с побуквенными сокращениями, вроде [[UNICEF]] «United Nations International Children’s Emergency Fund» — [[ЮНИСЕФ]].
В качестве перевода имени нарицательного, слово «уникод» можно было бы рассматривать как сложносокращённое — например, от выражения «универсальная кодировка». Однако это привело бы к появлению двух слов с похожим звучанием и колебанию значений. Поэтому при локализации операционной системы [[Windows 95]] компания «[[Майкрософт]]» ввела написание русского слова «Юникод» по форме имени собственного.{{нет АИ|13|07|2010}}
Написание «Юникод» уже твёрдо вошло в русскоязычные тексты. Согласно «[[Яндекс]]у», частота использования этого слова примерно в 10 раз превышает «Уникод»<ref>256 тыс. страниц «[http://yandex.ru/yandsearch?text=!(юникод) Юникод]» против 26 тыс. страниц «[http://yandex.ru/yandsearch?text=!(уникод) Уникод]».</ref>. В [[Википедия|Википедии]] используется более распространённый вариант.
На сайте Консорциума есть специальная страница, где рассматриваются проблемы передачи слова «Unicode» в различных языках и системах письма. Для русской кириллицы указан вариант «Юникод»<ref name=autogenerated1 />.
Формы, принятые иностранными организациями для русской передачи слова «Unicode», являются рекомендательными.
== См. также ==
* [[Символы, представленные в Юникоде]]
* [[ASCII]]
* [[ISO 8859-1]]
* [[UTF-8]]
* [[Кириллица в Юникоде]]
* [[Дроби в Юникоде]]
* [[Свободные универсальные шрифты]]
* [[Windows Glyph List 4]]
* [[Широкий символ]]
* [[Википедия:Проект:Внесение символов алфавитов народов России в Юникод]]
== Примечания ==
{{reflist}}
== Ссылки ==
* [http://www.unicode.org/ Официальный сайт Консорциума Юникода] {{ref-en}}
* {{dmoz|Computers/Software/Globalization/Character_Encoding/Unicode/|Unicode}} {{ref-en}}
* [http://www.unicode.org/standard/translations/russian.html Что такое Unicode?] {{ref-ru}}
* Последняя версия [http://www.unicode.org/versions/latest/] стандарта Юникод {{ref-en}}
* [http://www.unicode.org/versions/Unicode5.0.0/appC.pdf Связь Юникода и ISO/IEC 10646] (файл PDF) {{ref-en}}
* [http://www.cl.cam.ac.uk/~mgk25/unicode.html FAQ по UTF-8 и Unicode] {{ref-en}}
* Кириллица в Юникоде: [http://www.unicode.org/charts/PDF/U0400.pdf], [http://www.unicode.org/charts/PDF/U0500.pdf], [http://www.unicode.org/charts/PDF/U2DE0.pdf], [http://www.unicode.org/charts/PDF/UA640.pdf] (файлы PDF) {{ref-en}}
* [http://www.decodeunicode.org/ DecodeUnicode — Unicode WIKI] (50 000 изображений символов) {{ref-en}}
* [http://www.i18nguy.com/surrogates.html Включение поддержки дополнительных символов Юникода в Windows] {{ref-en}}
{{Избранная статья|Компьютер}}
{{К лишению статуса избранной|26 июня 2010}}
[[Категория:Юникод|*]]
[[Категория:Стандарты Интернета]]
[[Категория:Стандарты ISO]]
[[als:Unicode]]
[[ar:يونيكود]]
[[az:Unicode]]
[[bg:Уникод]]
[[bn:ইউনিকোড]]
[[br:Unicode]]
[[bs:Unikod]]
[[ca:Unicode]]
[[chr:Unicode/Cherokee]]
[[ckb:یوونیکۆد]]
[[cs:Unicode]]
[[da:Unicode]]
[[de:Unicode]]
[[el:Unicode]]
[[en:Unicode]]
[[eo:Unikodo]]
[[es:Unicode]]
[[et:Unicode]]
[[eu:Unicode]]
[[fa:یونیکد]]
[[fi:Unicode]]
[[fr:Unicode]]
[[ga:Unicode]]
[[gl:Unicode]]
[[he:יוניקוד]]
[[hi:यूनिकोड]]
[[hr:Unicode]]
[[hu:Unicode]]
[[hy:Յունիկոդ]]
[[ia:Unicode]]
[[id:Unicode]]
[[is:Unicode]]
[[it:Unicode]]
[[ja:Unicode]]
[[jv:Unicode]]
[[ka:უნიკოდი]]
[[kn:ಯುನಿಕೋಡ್]]
[[ko:유니코드]]
[[ks:यूनिकोड]]
[[ku:Unicode]]
[[ky:Юникод]]
[[lt:Unikodas]]
[[lv:Unikods]]
[[ml:യൂണികോഡ്]]
[[mn:Юникод]]
[[mr:युनिकोड]]
[[ms:Unicode]]
[[nds:Unicode]]
[[ne:युनिकोड]]
[[new:युनिकोड]]
[[nl:Unicode]]
[[nn:Unicode]]
[[no:Unicode]]
[[pl:Unicode]]
[[pt:Unicode]]
[[ro:Unicode]]
[[sah:Юникод]]
[[sh:Unikod]]
[[simple:Unicode]]
[[sk:Unicode]]
[[sl:Unicode]]
[[sq:Unicode]]
[[sr:Unikod]]
[[sv:Unicode]]
[[ta:ஒருங்குறி]]
[[te:యూనికోడ్]]
[[tg:Юникод]]
[[th:ยูนิโคด]]
[[tl:Unikodigo]]
[[tr:Unicode]]
[[uk:Юнікод]]
[[ur:یکرمزی]]
[[vi:Unicode]]
[[wa:Unicôde]]
[[yo:Unicode]]
[[zh:Unicode]]
[[zh-min-nan:Thong-iōng-bé]]
[[zh-yue:統一碼]]' |
Вики-текст новой страницы после правки (new_wikitext ) | '[[Файл:Unicode logo.gif|right|Unicode Consortium]]
'''Юнико́д'''<ref name=autogenerated1>{{cite web|url=http://www.unicode.org/standard/UnicodeTranscriptions.html|title=Unicode Transcriptions|publisher=|date=|accessdate=10 мая 2010|lang=en}}</ref> или '''Унико́д'''<ref>[http://www.paratype.ru/help/term/terms.asp?code=361 Уникод в словаре Paratype]</ref> ({{lang-en|Unicode}}) — стандарт [[Набор символов|кодирования символов]], позволяющий представить знаки практически всех письменных [[язык]]ов.<ref name='unicode-techintro'>{{cite web|url=http://www.unicode.org/standard/principles.html|title=The Unicode® Standard: A Technical Introduction|accessdate=2010-07-04}}</ref>
Стандарт предложен в [[1991 год]]у некоммерческой организацией «Консорциум Юникода» ({{lang-en|Unicode Consortium, Unicode Inc.}}).<ref>{{cite web|url=http://www.unicode.org/history/publicationdates.html|title=History of Unicode Release and Publication Dates|accessdate=2010-07-04}}</ref><ref>{{cite web|url=http://www.unicode.org/consortium/consort.html|title=The Unicode Consortium|accessdate=2010-07-04}}</ref> Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские [[иероглиф]]ы, математические символы, буквы [[греческий алфавит|греческого алфавита]], [[латинский алфавит|латиницы]] и [[кириллица|кириллицы]], при этом становится ненужным переключение [[кодовая страница|кодовых страниц]].<ref name='unicode-foreword'>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/Foreword.pdf|title=Foreword|accessdate=2010-07-04}}</ref>
Стандарт состоит из двух основных разделов: универсальный набор символов ({{lang-en|UCS, universal character set}}) и семейство кодировок ({{lang-en|UTF, Unicode transformation format}}). Универсальный набор символов задаёт однозначное соответствие символов [[код]]ам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора [[ASCII]] с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем.<ref name='unicode-02'>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/ch02.pdf|title=General Structure|accessdate=2010-07-05}}</ref> Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F (см. [[Кириллица в Юникоде]]).<ref>{{cite web|url=http://www.unicode.org/versions/Unicode5.2.0/ch07.pdf|title=European Alphabetic Scripts|accessdate=2010-07-04}}</ref>
== Предпосылки создания и развитие Юникода ==
К концу [[1980-е|1980-х годов]] стандартом стали 8-битные символы, при этом существовало множество разных 8-битных кодировок, и постоянно появлялись всё новые. Это объяснялось как постоянным расширением круга поддерживаемых языков, так и стремлением создать кодировку, частично совместимую с какой-нибудь другой (характерный пример — появление [[альтернативная кодировка|альтернативной кодировки]] для русского языка, обусловленное эксплуатацией западных программ, созданных для кодировки [[CP437]]). В результате появилась необходимость решения нескольких задач:
# Проблема «[[кракозябры|кракозябр]]» (отображения документов в неправильной кодировке):<ref name='unicode-foreword' /> её можно было решить либо последовательным внедрением методов указания используемой кодировки, либо внедрением единой для всех кодировки.
# Проблема ограниченности набора символов:<ref name='unicode-foreword' /> её можно было решить либо переключением шрифтов внутри документа, либо внедрением «широкой» кодировки. Переключение шрифтов издавна практиковалось в [[текстовый процессор|текстовых процессорах]], причём часто использовались [[нестандартные шрифты|шрифты с нестандартной кодировкой]], т. н. «dingbat fonts» — в итоге при попытке перенести документ в другую систему все нестандартные символы превращались в кракозябры.
# Проблема преобразования одной кодировки в другую: её можно было решить либо составлением таблиц перекодировки для каждой пары кодировок, либо использованием промежуточного преобразования в третью кодировку, включающую все символы всех кодировок.<ref>{{cite web|url=http://www.unicode.org/history/unicode88.pdf|title=Unicode 88|accessdate=2010-07-08}}</ref>
# Проблема дублирования шрифтов: традиционно для каждой кодировки делался свой шрифт, даже если эти кодировки частично (или полностью) совпадали по набору символов: эту проблему можно было решить, делая «большие» шрифты, из которых потом выбираются нужные для данной кодировки символы — однако это требует создания единого реестра символов, чтобы определять, чему что соответствует.
Было признано необходимым создание единой «широкой» кодировки. Кодировки с переменной длиной символа, широко использующиеся в Восточной Азии, были признаны слишком сложными в использовании, поэтому было решено использовать символы фиксированной ширины. Использование 32-битных символов казалось слишком расточительным, поэтому было решено использовать 16-битные.
Таким образом, первая версия Юникода представляла собой кодировку с фиксированным размером символа в 16 бит, то есть общее число кодов было 2<sup>16</sup> (65 536). Отсюда происходит практика обозначения символов четырьмя шестнадцатеричными цифрами (например, U+0410). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. Редко используемые символы должны были размещаться в «области символов для частного использования» ({{lang|en|Private Use Area}}), которая первоначально занимала коды U+D800…U+F8FF. Чтобы использовать Юникод также и в качестве промежуточного звена при преобразовании разных кодировок друг в друга, в него включили все символы, представленные во всех наиболее известных кодировках.
В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим, коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. [[#Способы представления|Способы представления]]).
Поскольку в ряде компьютерных систем (например, [[Windows NT]]<ref name="windows-nt">{{cite web|url=http://support.microsoft.com/kb/99884|title=Unicode and Microsoft Windows NT|work=Microsoft Support|lang=en}}</ref>) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых 65 536 позиций (так называемая {{lang-en|basic multilingual plane, BMP}}). Остальное пространство используется для «дополнительных символов» ({{lang-en|supplementary characters}}): систем письма вымерших языков или очень редко используемых [[китай]]ских иероглифов, математических и музыкальных символов.
Для совместимости со старыми 16-битными системами была изобретена система [[UTF-16]], где первые 65 536 позиций, за исключением позиций из интервала U+D800…U+DFFF, отображаются непосредственно как 16-битные числа, а остальные представляются в виде «суррогатных пар» (первый элемент пары из области U+D800…U+DBFF, второй элемент пары из области U+DC00…U+DFFF). Для суррогатных пар была использована часть кодового пространства (2048 позиций), ранее отведённого для «символов для частного использования».
Поскольку в UTF-16 можно отобразить только 2<sup>20</sup>+2<sup>16</sup>−2048 ({{formatnum:1112064}}) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода.
Хотя кодовая область Юникода была расширена за пределы 2<sup>16</sup> уже в версии 2.0, первые символы в «верхней» области были размещены только в версии 3.1.
Роль этой кодировки в веб-секторе постоянно растёт, на начало 2010 доля веб-сайтов, использующих Юникод, составила около 50 %.<ref>{{cite web|url=http://w3pro.ru/news/unicode-ispolzuetsya-pochti-na-50-veb-saitov|title=Unicode используется почти на 50% веб-сайтов|lang=ru}}</ref>
== Версии Юникода ==
По мере изменения и пополнения таблицы символов системы Юникода и выхода новых версий этой системы, — а эта работа ведётся постоянно, поскольку изначально система Юникод включала только Plane 0 — двухбайтные коды, — выходят и новые документы [[ISO]]. Система Юникод существует в общей сложности в следующих версиях:
* 1.1 (соответствует стандарту ISO/IEC 10646—1:[[1993]]), стандарт 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.2, стандарт [[2002 год]]а.
* 4.0, стандарт [[2003]].
* 4.01, стандарт [[2004]].
* 4.1, стандарт [[2005]].
* 5.0, стандарт [[2006]].
* 5.1, стандарт [[2008]].
* 5.2, стандарт [[2009]].
* 6.0, стандарт [[2010]].
== Кодовое пространство ==
Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 2<sup>31</sup> ({{formatnum:2147483648}}) кодовых позиций, было принято решение использовать лишь {{formatnum:1112064}} для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно — сегодня (в версии 6.0) используется чуть менее {{formatnum:110000}} кодовых позиций ({{formatnum:109242}} графических и 273 прочих символов).
Кодовое пространство разбито на 17 ''плоскостей'' по 2<sup>16</sup> (65536) символов. Нулевая плоскость называется ''базовой'', в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая — для редко используемых иероглифов ККЯ, третья зарезервирована для архаичных китайских иероглифов<ref>[http://unicode.org/roadmaps/tip/ Roadmap to the TIP (Tertiary Ideographic Plane)]</ref>. Плоскости 15 и 16 выделены для частного употребления.<ref name='unicode-02' />
Для обозначения символов Unicode используется запись вида «U+''xxxx''» (для кодов 0…FFFF), или «U+''xxxxx''» (для кодов 10000…FFFFF), или «U+''xxxxxx''» (для кодов 100000…10FFFF), где ''xxx'' — [[шестнадцатеричная система счисления|шестнадцатеричные]] цифры. Например, символ «я» (U+044F) имеет код 044F<sub>[[шестнадцатеричная система счисления|16]]</sub> = 1103<sub>[[десятичная система счисления|10]]</sub>.
== Система кодирования ==
Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для [[компьютер]]ной обработки текстовых данных.
Графические символы — это символы, имеющие видимое изображение. Графическим символам противопоставляются управляющие символы и символы форматирования.
Графические символы включают в себя следующие группы:
* буквы, содержащиеся хотя бы в одном из обслуживаемых [[алфавит]]ов;
* цифры;
* знаки пунктуации;
* специальные знаки ([[математика|математические]], технические, [[идеограмма|идеограммы]] и пр.);
* разделители.
Юникод — это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character).
== Модифицирующие символы ==
[[Файл:Diacritic-j.png|right|thumb|Представление символа «Й» (U+0419) в виде базового символа «И» (U+0418) и модифицирующего символа « ̆» (U+0306)]]
Графические символы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в [[строка|строке]]. К ним относятся, в частности, знаки ударения и прочие [[диакритические знаки]]. Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми ({{lang-en|base characters}}), а непротяжённые — модифицирующими ({{lang-en|combining characters}}); причём последние не могут встречаться самостоятельно. Например, символ «á» может быть представлен как последовательность базового символа «a» (U+0061) и модифицирующего символа « ́» (U+0301) или как монолитный символ «á» (U+00C1).
Особый тип модифицирующих символов — селекторы варианта начертания ({{lang-en|variation selectors}}). Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного [[монгольский алфавит|монгольского алфавита]] и для символов [[Монгольское квадратное письмо|монгольского квадратного письма]].
== Формы нормализации ==
Поскольку одни и те же символы можно представить различными кодами, что иногда затрудняет обработку, существуют процессы нормализации, предназначенные для приведения текста к определённому стандартному виду.
В стандарте Юникода определены 4 формы нормализации текста:
* Форма нормализации D (NFD) — каноническая декомпозиция. В процессе приведения текста в эту форму все составные символы рекурсивно заменяются на несколько составных, в соответствии с таблицами декомпозиции.
* Форма нормализации C (NFC) — каноническая декомпозиция с последующей канонической композицией. Сначала текст приводится к форме D, после чего выполняется каноническая композиция — текст обрабатывается от начала к концу и выполняются следующие правила:
** Символ S является ''начальным'', если он имеет нулевой класс модификации <!-- combining class of zero --> в базе символов Юникода.
** В любой последовательности символов, стартующей с начального символа S, символ C блокируется от S, если и только если между S и C есть какой-либо символ B, который или является начальным, или имеет одинаковый или больший класс модификации, чем C. Это правило распространяется только на строки, прошедшие каноническую декомпозицию.
** ''Первичным'' композитом считается символ, у которого есть каноническая декомпозиция в базе символов Юникода (или каноническая декомпозиция для [[Хангыль|хангыля]] и он не входит в [http://www.unicode.org/unicode/reports/tr15/#Primary_Exclusion_List_Table список исключений]).
** Символ X может быть первично совмещён с символом Y если и только если существует первичный композит Z, канонически эквивалентный последовательности <X, Y>.
** Если очередной символ C не блокируется последним встреченным начальным базовым символом L, и он может быть успешно первично совмещён с ним, то L заменяется на композит L-C, а C удаляется.
* Форма нормализации KD (NFKD) — совместимая декомпозиция. При приведении в эту форму все составные символы заменяются используя как канонические карты декомпозиции Юникода, так и совместимые карты декомпозиции, после чего результат ставится в каноническом порядке.
* Форма нормализации KC (NFKC) — совместимая декомпозиция с последующей ''канонической'' композицией.
Термины «композиция» и «декомпозиция» понимают под собой соответственно соединение или разложение символов на составные части.
=== Примеры ===
{| class="standard"
!Исходный текст||NFD||NFC||NFKD||NFKC
|-
|Français (<code>Fran\xe7ais</code>)||<code>Franc\u0327ais</code>||<code>Fran\xe7ais</code>||<code>Franc\u0327ais</code>||<code>Fran\xe7ais</code>
|-
|А, Ё, Й (<code>\u0410, \u0401, \u0419</code>)||<code>\u0410, \u0415\u0308, \u0418\u0306</code>||<code>\u0410, \u0401, \u0419</code>||<code>\u0410, \u0415\u0308, \u0418\u0306</code>||<code>\u0410, \u0401, \u0419</code>
|-
|が (<code>\u304c</code>)||<code>\u304b\u3099</code>||<code>\u304c</code>||<code>\u304b\u3099</code>||<code>\u304c</code>
|-
|Henry IV||<code>Henry IV</code>||<code>Henry IV</code>||<code>Henry IV</code>||<code>Henry IV</code>
|-
|Henry Ⅳ (<code>Henry \u2163</code>)||<code>Henry \u2163</code>||<code>Henry \u2163</code>||<code>Henry IV</code>||<code>Henry IV</code>
|}
== Двунаправленное письмо ==
Стандарт Юникод поддерживает письменности языков как с направлением написания слева направо ({{lang-en|left-to-right, LTR}}), так и с написанием справа налево ({{lang-en|right-to-left, RTL}}) — например, [[арабское письмо|арабское]] и [[еврейский алфавит|еврейское]] письмо. В обоих случаях символы хранятся в «естественном» порядке; их отображение с учётом нужного направления письма обеспечивается приложением.
Кроме того, Юникод поддерживает комбинированные тексты, сочетающие фрагменты с разным направлением письма. Данная возможность называется ''двунаправленность'' ({{lang-en|bidirectional text, BiDi}}). Некоторые упрощённые обработчики текста (например, в сотовых телефонах) могут поддерживать Юникод, но не иметь поддержки двунаправленности. Все символы Юникода поделены на несколько категорий: пишущиеся слева направо, пишущиеся справа налево, и пишущиеся в любом направлении. Символы последней категории (в основном это [[знаки пунктуации]]) при отображении принимают направление окружающего их текста.
== Представленные символы ==
{{Main|Символы, представленные в Юникоде}}
[[Файл:Roadmap to Unicode BMP.svg|right|273px|thumb|Схема базовой плоскости Unicode, см. [[Символы, представленные в Юникоде#Базовая многоязыковая плоскость|описание]]]]
Юникод включает практически все современные [[письменность|письменности]], в том числе:
{{columns-list|4|
* [[арабское письмо|арабскую]],
* [[армянское письмо|армянскую]],
* [[бенгальское письмо|бенгальскую]],
* [[Бирманское письмо|бирманскую]],
* [[Глаголица|глаголицу]]
* [[Греческий алфавит|греческую]],
* [[грузинское письмо|грузинскую]],
* [[деванагари]],
* [[еврейский алфавит|еврейскую]],
* [[Кириллица|кириллицу]],
* [[китайское письмо|китайскую]] (китайские иероглифы активно используются в [[японский язык|японском языке]], а также достаточно редко в [[корейский язык|корейском]]),
* [[коптское письмо|коптскую]],
* [[Кхмерское письмо|кхмерскую]],
* [[Латинский алфавит|латинскую]],
* [[Тамильское письмо|тамильскую]],
* [[Хангыль|корейскую (хангыль)]],
* [[письмо чероки|чероки]],
* [[Эфиопское письмо|эфиопскую]],
* [[японское письмо|японскую]] (которая включает в себя кроме [[кандзи|китайских иероглифов]] ещё и [[кана|слоговую азбуку]]),
}}
и другие.
С академическими целями добавлены многие исторические письменности, в том числе: [[руны]], [[древнегреческий язык|древнегреческая]], [[египетские иероглифы]], [[клинопись]], [[письменность майя]], [[этрусский алфавит]].
В Юникоде представлен широкий набор [[таблица математических символов|математических]] и [[музыка]]льных символов, а также [[пиктограмма|пиктограмм]].
Однако в Юникод принципиально не включаются логотипы компаний и продуктов, хотя они и встречаются в шрифтах (например, логотип [[Apple]] в кодировке [[MacRoman]] (0xF0) или логотип [[Microsoft Windows|Windows]] в шрифте Wingdings (0xFF)). В юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов.
== ISO/IEC 10646 ==
Консорциум Юникода работает в тесной связи с рабочей группой ISO/IEC/JTC1/SC2/WG2, которая занимается разработкой международного стандарта 10646 ([[ISO]]/[[IEC]] 10646). Между стандартом Юникода и ISO/IEC 10646 установлена синхронизация, хотя каждый стандарт использует свою терминологию и систему документации.
Сотрудничество Консорциума Юникода с Международной организацией по стандартизации ({{lang-en|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 значит ''универсальный многооктетный'' (многобайтовый) ''кодированный набор символов'' ({{lang-en|universal multiple-octet coded character set}}). UCS-2 можно считать подмножеством UTF-16 (UTF-16 без суррогатных пар), а UCS-4 является синонимом для UTF-32.
== Способы представления ==
Юникод имеет несколько форм представления ({{lang-en|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 ([http://tools.ietf.org/html/rfc4042 RFC 4042]).
В [[Microsoft]] [[Windows NT]] и основанных на ней системах [[Windows 2000]] и [[Windows XP]] в основном [[юникод в операционных системах Microsoft|используется]] форма UTF-16LE. В [[UNIX]]-подобных [[Операционная система|операционных системах]] [[GNU/Linux]], [[BSD]] и [[Mac OS X]] принята форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в [[оперативная память|оперативной памяти]].
[[Punycode]] — другая форма кодирования последовательностей Unicode-символов в так называемые ACE-последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах.
=== UTF-8 ===
{{Основная статья|UTF-8}}
UTF-8 — представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст [[ASCII]]. И наоборот, в тексте UTF-8 любой [[байт]] со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид <code>11xxxxxx</code>, а остальные — <code>10xxxxxx</code>.
Формат UTF-8 был изобретён [[2 сентября]] [[1992 год]]а [[Томпсон, Кен|Кеном Томпсоном]] и [[Пайк, Роб|Робом Пайком]] и реализован в [[Plan 9]]<ref>http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt{{ref-en}}</ref>. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.
Символы UTF-8 получаются из Unicode [http://www.linuxdoc.ru/manpages/man7/utf-8.7.html следующим образом]:
<pre>
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
</pre>
Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности.
=== Порядок байтов ===
В потоке данных UTF-16 старший байт может записываться либо перед младшим ({{lang-en|UTF-16 big-endian}}), либо после младшего ({{lang-en|UTF-16 little-endian}}). Аналогично существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE.
Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый ''меткой порядка байтов'' ({{lang-en|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-16 и UTF-32, не содержащие BOM, должны иметь порядок байтов big-endian ([http://unicode.org/faq/utf_bom.html#gen6 unicode.org]).
К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).
=== Юникод и традиционные кодировки ===
Внедрение Юникода привело к изменению подхода к традиционным 8-битным кодировкам. Если раньше кодировка задавалась шрифтом, то теперь она задаётся таблицей соответствия между данной кодировкой и Юникодом. Фактически 8-битные кодировки превратились в форму представления некоторого подмножества Юникода. Это намного упростило создание программ, которые должны работать с множеством разных кодировок: теперь, чтобы добавить поддержку ещё одной кодировки, надо всего лишь добавить ещё одну таблицу перекодировки в Юникод.
Кроме того, многие форматы данных позволяют вставлять любые символы Юникода, даже если документ записан в старой 8-битной кодировке. Например, в HTML можно использовать [[Мнемоники в HTML|коды с амперсандом]].
=== Реализации ===
Большинство современных операционных систем в той или иной степени обеспечивают поддержку Юникода.
В операционных системах семейства [[Windows NT]] для внутреннего представления имён файлов и других системных строк используется двухбайтовая кодировка UTF-16LE. Системные вызовы, принимающие строковые параметры, существуют в однобайтном и двухбайтном вариантах. Подробнее см. в статье [[Юникод в операционных системах Microsoft]].
[[UNIX]]-подобные операционные системы, в том числе [[GNU/Linux]], [[BSD]], [[Mac OS X]], используют для представления Юникода кодировку UTF-8. Большинство программ могут работать с UTF-8 как с традиционными однобайтными кодировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно перекодируются в UCS-4, так что каждому символу соответствует [[машинное слово]].
Одной из первых успешных коммерческих реализаций Юникода стала среда программирования [[Java]]. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.
== Методы ввода ==
Поскольку ни одна [[раскладка клавиатуры]] не может позволить вводить все символы Юникода одновременно, от [[операционная система|операционных систем]] и [[прикладное программное обеспечение|прикладных программ]] требуется поддержка альтернативных методов ввода произвольных символов Юникода.
=== [[Microsoft Windows]] ===
{{Main|Юникод в операционных системах Microsoft}}
Начиная с [[Windows 2000]], служебная программа «Таблица символов» (charmap.exe) показывает все символы в ОС и позволяет копировать их в [[буфер обмена]]. Похожая таблица есть, например, в [[Microsoft Word]].
Иногда можно набрать [[Шестнадцатеричная система счисления|шестнадцатеричный]] код, нажать [[Alt (клавиша)|Alt]]+X, и код будет заменён на соответствующий символ, например, в [[WordPad]], Microsoft Word. В редакторах Alt+X выполняет и обратное преобразование.
Во многих программах MS Windows, чтобы получить символ Unicode, нужно при нажатой клавише Alt набрать десятичное значение кода символа на цифровой клавиатуре.
=== [[Macintosh]] ===
В [[Mac OS]] 8.5 и более поздних версиях поддерживается метод ввода, называемый «Unicode Hex Input». При зажатой клавише Option требуется набрать четырёхзначный шестнадцатеричный код требуемого символа. Этот метод позволяет вводить символы с кодами, большими U+FFFF, используя пары суррогатов; такие пары операционной системой будут автоматически заменены на одиночные символы. Этот метод ввода перед использованием нужно активизировать в соответствующем разделе системных настроек и затем выбрать как текущий метод ввода в меню клавиатуры.
Начиная с [[Mac OS X]] 10.2, существует также приложение «Character Palette», позволяющее выбирать символы из таблицы, в которой можно выделять символы определённого блока или символы, поддерживаемые конкретным шрифтом.
=== [[GNU/Linux]] ===
{{Main|Юникод в GNU/Linux}}
В [[GNOME]] также есть утилита «Таблица символов», позволяющая отображать символы определённого блока или системы письма и предоставляющая возможность поиска по названию или описанию символа. Когда код нужного символа известен, его можно ввести в соответствии со стандартом [[ISO]] 14755: при зажатых клавишах Ctrl и Shift ввести шестнадцатеричный код (начиная с некоторой версии GTK+ ввод кода нужно предварить нажатием клавиши ''«U»''). Вводимый шестнадцатеричный код может иметь до 32 бит в длину, позволяя вводить любые символы Юникода без использования суррогатных пар.
Все приложения [[X Window System|X Window]], включая GNOME и [[KDE]], поддерживают ввод при помощи клавиши Compose. Для клавиатур, на которых нет отдельной клавиши [[Compose]], для этой цели можно назначить любую клавишу — например, [[Caps Lock]].
Консоль GNU/Linux также допускает ввод символа Юникода по его коду — для этого десятичный код символа нужно ввести цифрами расширенного блока клавиатуры при зажатой клавише Alt. Можно вводить символы и по их шестнадцатеричному коду: для этого нужно зажать клавишу AltGr, и для ввода цифр A—F использовать клавиши расширенного блока клавиатуры от NumLock до Enter (по часовой стрелке). Поддерживается также и ввод в соответствии с ISO 14755. Для того чтобы перечисленные способы могли работать, нужно включить в консоли режим Юникода вызовом <tt>unicode_start</tt>(1) и выбрать подходящий шрифт вызовом <tt>setfont</tt>(8).
[[Mozilla Firefox]] для GNU/Linux поддерживает ввод символов по ISO 14755.
== Проблемы Юникода ==
Юникод не лишён недостатков (хотя, в основном, они связаны с возможностями обработчиков текста, а не непосредственно с принципом кодирования).
* Некоторые системы письма всё ещё не представлены должным образом в Юникоде. Изображение «длинных» надстрочных символов, простирающихся над несколькими буквами, как например, в [[церковнославянский язык|церковнославянском языке]], пока не реализовано.
* Тексты на [[китайский язык|китайском]], [[корейский язык|корейском]] и [[японский язык|японском]] языке имеют традиционное написание сверху вниз, начиная с правого верхнего угла. Переключение горизонтального и вертикального написания для этих языков не предусмотрено в Юникоде — это должно осуществляться средствами [[язык разметки|языков разметки]] или внутренними механизмами [[текстовый процессор|текстовых процессоров]].
* Первоначальная версия Юникода предполагала наличие большого количества готовых символов, в последующем было отдано предпочтение сочетанию букв с диакритическими модифицирующими знаками ({{lang-en|combining diacritics}}). Например, русские буквы Ё (U+0401) и Й (U+0419) существуют в виде монолитных символов, хотя могут быть представлены и набором базового символа с последующим [[диакритический знак|диакритическим знаком]], то есть в составной форме ({{lang-en|decomposed}}): Е+ ̈ (U+0415 U+0308), И+ ̆ (U+0418 U+0306). В то же время множество символов из языков с [[алфавиты на основе кириллицы|алфавитами на основе кириллицы]] не имеют монолитных форм.
* Юникод предусматривает возможность разных начертаний одного и того же символа в зависимости от языка. Так, [[китайское письмо|китайские иероглифы]] могут иметь разные начертания в китайском, японском ([[кандзи]]) и корейском ([[ханчча]]), но при этом в Юникоде обозначаться одним и тем же символом (так называемая CJK-унификация), хотя упрощённые и полные иероглифы всё же имеют разные коды. Часто возникают накладки, когда, например, японский текст выглядит «по-китайски». Аналогично, [[русский язык|русский]] и [[сербский язык]]и используют разное начертание курсивных букв ''п'' и ''т'' (в сербском они выглядят как <span style="text-decoration: overline; font-style: italic">и</span> и <span style="text-decoration: overline; font-style: italic">ш</span>, см. [[сербский курсив]]). Поэтому нужно следить, чтобы текст всегда был правильно помечен как относящийся к тому или другому языку.
* Даже перевод из строчных букв в заглавные зависит от языка. Например: в [[турецкий язык|турецком]] существуют буквы [[i без точки|İi и Iı]] — таким образом, турецкие правила изменения регистра конфликтуют с [[английский язык|английскими]], которые предписывают «i» переводить в «I».
* Файлы с текстом в Юникоде занимают больше места в памяти, так как один символ кодируется не одним байтом, как в различных национальных кодировках, а последовательностью байтов (исключение составляет UTF-8 для языков, алфавит которых укладывается в ASCII, а также наличие в тексте символов двух и более языков, алфавит которых ''не'' укладывается в ASCII<ref>В некоторых случаях текст в Юникоде может занимать существенно меньше места, чем текст в однобайтовой кодировке. Например, если некая веб-страница содержит примерно поровну русского и греческого текста, то в однобайтовой кодировке придётся либо русские, либо греческие буквы записывать в виде кодов с амперсандом, которые занимают 6—7 байт на символ (при использовании десятичных кодов), т. е. в среднем на букву придётся 3,5—4 байта, в то время как UTF-8 занимает только 2 байта на греческую или русскую букву.</ref>). Файл шрифта, необходимый для отображения всех символов таблицы Юникод, занимает сравнительно много места в памяти и требует бо́льших вычислительных ресурсов<ref>Один из файлов шрифтов Arial Unicode имеет размер 24 мегабайта; существует Times New Roman размером 120 мегабайт, он содержит количество символов, близкое к 65536.</ref>. С увеличением мощности компьютерных систем и удешевлением памяти и дискового пространства эта проблема становится всё менее существенной; тем не менее, она остаётся и в ближайшем будущем останется актуальной для портативных устройств, например, для мобильного телефона<ref>Даже для самого современного и дорогого мобильного телефона затруднительно выделить 120 Мбайт памяти для полного Юникод-шрифта. На практике использование полных шрифтов требуется редко.</ref>.
* Хотя поддержка Юникода реализована в наиболее распространённых операционных системах, до сих пор не всё прикладное программное обеспечение поддерживает корректную работу с ним. В частности, не всегда обрабатываются метки BOM, и плохо поддерживаются диакритические символы. Проблема является временной и есть следствие сравнительной новизны стандартов Юникода (в сравнении с однобайтовыми национальными кодировками).
* Производительность некоторых программ снижается при использовании Юникода вместо однобайтовых кодировок.
== «Юникод» или «Уникод»? ==
«Unicode» — одновременно и имя собственное (или часть имени, например, Unicode Consortium), и имя нарицательное, происходящее из английского языка.
На первый взгляд предпочтительнее использовать написание «Уникод». В [[русский язык|русском языке]] уже есть [[морфема|морфемы]] «уни-» (слова с латинским элементом «uni-» традиционно переводились и писались через «уни-»: универсальный, униполярный, унификация, униформа) и «код». Напротив, торговые марки, заимствованные из [[английский язык|английского языка]], обычно передаются посредством практической транскрипции, в которой деэтимологизированное сочетание букв «uni-» записывается в виде «юни-» («[[Юнилевер]]», «[[Юникс]]» и т. п.), то есть точно так же, как в случае с побуквенными сокращениями, вроде [[UNICEF]] «United Nations International Children’s Emergency Fund» — [[ЮНИСЕФ]].
В качестве перевода имени нарицательного, слово «уникод» можно было бы рассматривать как сложносокращённое — например, от выражения «универсальная кодировка». Однако это привело бы к появлению двух слов с похожим звучанием и колебанию значений. Поэтому при локализации операционной системы [[Windows 95]] компания «[[Майкрософт]]» ввела написание русского слова «Юникод» по форме имени собственного.{{нет АИ|13|07|2010}}
Написание «Юникод» уже твёрдо вошло в русскоязычные тексты. Согласно «[[Яндекс]]у», частота использования этого слова примерно в 10 раз превышает «Уникод»<ref>256 тыс. страниц «[http://yandex.ru/yandsearch?text=!(юникод) Юникод]» против 26 тыс. страниц «[http://yandex.ru/yandsearch?text=!(уникод) Уникод]».</ref>. В [[Википедия|Википедии]] используется более распространённый вариант.
На сайте Консорциума есть специальная страница, где рассматриваются проблемы передачи слова «Unicode» в различных языках и системах письма. Для русской кириллицы указан вариант «Юникод»<ref name=autogenerated1 />.
Формы, принятые иностранными организациями для русской передачи слова «Unicode», являются рекомендательными.
== См. также ==
* [[Символы, представленные в Юникоде]]
* [[ASCII]]
* [[ISO 8859-1]]
* [[UTF-8]]
* [[Кириллица в Юникоде]]
* [[Дроби в Юникоде]]
* [[Свободные универсальные шрифты]]
* [[Windows Glyph List 4]]
* [[Широкий символ]]
* [[Википедия:Проект:Внесение символов алфавитов народов России в Юникод]]
== Примечания ==
{{reflist}}
== Ссылки ==
* [http://www.unicode.org/ Официальный сайт Консорциума Юникода] {{ref-en}}
* {{dmoz|Computers/Software/Globalization/Character_Encoding/Unicode/|Unicode}} {{ref-en}}
* [http://www.unicode.org/standard/translations/russian.html Что такое Unicode?] {{ref-ru}}
* Последняя версия [http://www.unicode.org/versions/latest/] стандарта Юникод {{ref-en}}
* [http://www.unicode.org/versions/Unicode5.0.0/appC.pdf Связь Юникода и ISO/IEC 10646] (файл PDF) {{ref-en}}
* [http://www.cl.cam.ac.uk/~mgk25/unicode.html FAQ по UTF-8 и Unicode] {{ref-en}}
* Кириллица в Юникоде: [http://www.unicode.org/charts/PDF/U0400.pdf], [http://www.unicode.org/charts/PDF/U0500.pdf], [http://www.unicode.org/charts/PDF/U2DE0.pdf], [http://www.unicode.org/charts/PDF/UA640.pdf] (файлы PDF) {{ref-en}}
* [http://www.decodeunicode.org/ DecodeUnicode — Unicode WIKI] (50 000 изображений символов) {{ref-en}}
* [http://www.i18nguy.com/surrogates.html Включение поддержки дополнительных символов Юникода в Windows] {{ref-en}}
* [http://computer20.euro.ru/2_unicode/2_unicode.htm Чего не было в кодировках и до чего до сих пор так и не додумались]
{{Избранная статья|Компьютер}}
{{К лишению статуса избранной|26 июня 2010}}
[[Категория:Юникод|*]]
[[Категория:Стандарты Интернета]]
[[Категория:Стандарты ISO]]
[[als:Unicode]]
[[ar:يونيكود]]
[[az:Unicode]]
[[bg:Уникод]]
[[bn:ইউনিকোড]]
[[br:Unicode]]
[[bs:Unikod]]
[[ca:Unicode]]
[[chr:Unicode/Cherokee]]
[[ckb:یوونیکۆد]]
[[cs:Unicode]]
[[da:Unicode]]
[[de:Unicode]]
[[el:Unicode]]
[[en:Unicode]]
[[eo:Unikodo]]
[[es:Unicode]]
[[et:Unicode]]
[[eu:Unicode]]
[[fa:یونیکد]]
[[fi:Unicode]]
[[fr:Unicode]]
[[ga:Unicode]]
[[gl:Unicode]]
[[he:יוניקוד]]
[[hi:यूनिकोड]]
[[hr:Unicode]]
[[hu:Unicode]]
[[hy:Յունիկոդ]]
[[ia:Unicode]]
[[id:Unicode]]
[[is:Unicode]]
[[it:Unicode]]
[[ja:Unicode]]
[[jv:Unicode]]
[[ka:უნიკოდი]]
[[kn:ಯುನಿಕೋಡ್]]
[[ko:유니코드]]
[[ks:यूनिकोड]]
[[ku:Unicode]]
[[ky:Юникод]]
[[lt:Unikodas]]
[[lv:Unikods]]
[[ml:യൂണികോഡ്]]
[[mn:Юникод]]
[[mr:युनिकोड]]
[[ms:Unicode]]
[[nds:Unicode]]
[[ne:युनिकोड]]
[[new:युनिकोड]]
[[nl:Unicode]]
[[nn:Unicode]]
[[no:Unicode]]
[[pl:Unicode]]
[[pt:Unicode]]
[[ro:Unicode]]
[[sah:Юникод]]
[[sh:Unikod]]
[[simple:Unicode]]
[[sk:Unicode]]
[[sl:Unicode]]
[[sq:Unicode]]
[[sr:Unikod]]
[[sv:Unicode]]
[[ta:ஒருங்குறி]]
[[te:యూనికోడ్]]
[[tg:Юникод]]
[[th:ยูนิโคด]]
[[tl:Unikodigo]]
[[tr:Unicode]]
[[uk:Юнікод]]
[[ur:یکرمزی]]
[[vi:Unicode]]
[[wa:Unicôde]]
[[yo:Unicode]]
[[zh:Unicode]]
[[zh-min-nan:Thong-iōng-bé]]
[[zh-yue:統一碼]]' |