Подробности записи журнала 322577

13:50, 7 ноября 2010: 26 «Спам ссылками» 213.87.64.158 (обсуждение) на странице Юникод, меры: Предупреждение (просмотреть)

Изменения, сделанные в правке

* [http://www.decodeunicode.org/ DecodeUnicode — Unicode WIKI] (50 000 изображений символов) {{ref-en}}
* [http://www.decodeunicode.org/ DecodeUnicode — Unicode WIKI] (50 000 изображений символов) {{ref-en}}
* [http://www.i18nguy.com/surrogates.html Включение поддержки дополнительных символов Юникода в Windows] {{ref-en}}
* [http://www.i18nguy.com/surrogates.html Включение поддержки дополнительных символов Юникода в Windows] {{ref-en}}
* [http://computer20.euro.ru/2_unicode/2_unicode.htm Чего не было в кодировках и до чего до сих пор так и не додумались]



{{Избранная статья|Компьютер}}
{{Избранная статья|Компьютер}}

Параметры действия

ПеременнаяЗначение
Имя учётной записи (user_name)
'213.87.64.158'
ID страницы (page_id)
13025
Пространство имён страницы (page_namespace)
0
Название страницы (без пространства имён) (page_title)
'Юникод'
Полное название страницы (page_prefixedtitle)
'Юникод'
Действие (action)
'edit'
Описание правки/причина (summary)
'/* Ссылки */ '
Была ли правка отмечена как «малое изменение» (больше не используется) (minor_edit)
false
Вики-текст старой страницы до правки (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' /> её можно было решить либо переключением шрифтов внутри документа, либо внедрением «широкой» кодировки. Переключение шрифтов издавна практиковалось в [[текстовый процессор|текстовых процессорах]], причём часто использовались [[нестандартные шрифты|шрифты с нестандартной кодировкой]], т.&nbsp;н. «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&nbsp;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&nbsp;536 позиций (так называемая {{lang-en|basic multilingual plane, BMP}}). Остальное пространство используется для «дополнительных символов» ({{lang-en|supplementary characters}}): систем письма вымерших языков или очень редко используемых [[китай]]ских иероглифов, математических и музыкальных символов. Для совместимости со старыми 16-битными системами была изобретена система [[UTF-16]], где первые 65&nbsp;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, канонически эквивалентный последовательности &lt;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)). В&nbsp;юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов. == 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&nbsp;— представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст [[ASCII]]. И наоборот, в тексте UTF-8 любой [[байт]] со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид <code>11xxxxxx</code>, а остальные&nbsp;— <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}}): Е+&nbsp; ̈ (U+0415 U+0308), И+&nbsp; ̆ (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 байт на символ (при использовании десятичных кодов), т.&nbsp;е. в среднем на букву придётся 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&nbsp;— Unicode WIKI] (50&nbsp;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' /> её можно было решить либо переключением шрифтов внутри документа, либо внедрением «широкой» кодировки. Переключение шрифтов издавна практиковалось в [[текстовый процессор|текстовых процессорах]], причём часто использовались [[нестандартные шрифты|шрифты с нестандартной кодировкой]], т.&nbsp;н. «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&nbsp;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&nbsp;536 позиций (так называемая {{lang-en|basic multilingual plane, BMP}}). Остальное пространство используется для «дополнительных символов» ({{lang-en|supplementary characters}}): систем письма вымерших языков или очень редко используемых [[китай]]ских иероглифов, математических и музыкальных символов. Для совместимости со старыми 16-битными системами была изобретена система [[UTF-16]], где первые 65&nbsp;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, канонически эквивалентный последовательности &lt;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)). В&nbsp;юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов. == 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&nbsp;— представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст [[ASCII]]. И наоборот, в тексте UTF-8 любой [[байт]] со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид <code>11xxxxxx</code>, а остальные&nbsp;— <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}}): Е+&nbsp; ̈ (U+0415 U+0308), И+&nbsp; ̆ (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 байт на символ (при использовании десятичных кодов), т.&nbsp;е. в среднем на букву придётся 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&nbsp;— Unicode WIKI] (50&nbsp;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:統一碼]]'
Была ли правка сделана через выходной узел сети Tor (tor_exit_node)
0
Unix-время изменения (timestamp)
1289137821