Unicode

Логотип Unicode Consortium

Юнико́д[1] (чаще всего) или Унико́д[2] (англ. Unicode) — стандарт ирования символов, включающий в себя знаки почти всех письменных языков мира[3]. В настоящее время стандарт является доминирующим в Интернете.

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

Стандарт состоит из двух основных частей: универсального набора символов (англ. Universal character set, UCS) и семейства ировок (англ. Unicode transformation format, UTF). Универсальный набор символов перечисляет допустимые по стандарту Юни символы и присваивает каждому символу в виде неотрицательного целого числа, записываемого обычно в шестнадцатеричной форме с префиксом U+, например, U+040F. Семейство ировок определяет способы преобразования ов символов для передачи в потоке или в файле.

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


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

«Unicode — это уникальный для любого символа, независимо от платформы, независимо от программы, независимо от языка.
Консорциум Юниа[9]
»

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

  1. проблема неправильной расировки;
  2. проблема ограниченности набора символов;
  3. проблема преобразования одной ировки в другую;
  4. проблема дублирования шрифтов.

Проблема неправильной расировки вызывала появление в документе символов иностранных языков, не предполагавшихся в документе, или появление не предполагавшихся псевдографических символов, прозванных русскоязычными пользователями «кракозябрами». Проблема во многом была вызвана отсутствием стандартизированной формы указания ировки для файла или потока. Проблему можно было решить либо последовательным внедрением стандарта указания ировки, либо внедрением общей для всех языков ировки.[6]

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

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

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

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

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

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

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

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

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

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

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

Версии Юниа[ | ]

Работа по доработке стандарта продолжается. Новые версии выпускаются по мере изменения и пополнения таблиц символов. Параллельно выпускаются новые документы ISO/IEC 10646.

Первый стандарт выпущен в 1991 году, последний на данный момент — в 2017, следующий ожидается летом 2018 года[13][14]. Стандарты версий 1.0—5.0 публиковались как книги, и имеют ISBN[15][16].

Номер версии стандарта составлен из трёх цифр (например, 3.1.1). Третью цифру меняют при внесении в стандарт небольших изменений, не добавляющих новых символов[17].

База данных символов Юниа (Unicode Character Database) доступна для всех версий на официальном сайте как в простом текстовом, так и в XML-формате. Файлы распространяются под BSD-подобной лицензией.

Версии Юниа
Номер версии Дата публикации ISBN книги Издание ISO/IEC 10646 Количество письменностей Количество символов[A 1] Изменения
1.0.0[18] Октябрь 1991 ISBN 0-201-56788-1 (Vol.1) 24 7161 Изначально Юни содержал символы следующих письменностей: арабское письмо, армянское письмо, бенгальское письмо, чжуиньское письмо, кириллица, деванагари, грузинское письмо, греческое и коптское письмо, гуджарати, гурмукхи, хангыль, еврейское письмо, хирагана, каннада, катакана, лаосское письмо, латиница, малаялам, ория, тамильское письмо, телугу, тайское письмо и тибетское письмо[19]
1.0.1 Июнь 1992 ISBN 0-201-60845-6 (Vol.2) 25 28 359 Добавлены 20 902 унифицированные идеограммы китайского, японского и корейского письма[en][20]
1.1[21] Июнь 1993 ISO/IEC 10646-1:1993 24 34 233 Добавлено 4306 слогов хангыля, дополнивших уже имеющиеся в ировке 2350 символов. Удалены символы тибетского письма[22]
2.0[23] Июль 1996 ISBN 0-201-48345-9 ISO/IEC 10646-1:1993 и Amendments 5, 6, 7 25 38 950 Удалены добавленные ранее слоги хангыля, и добавлены 11 172 новых слога хангыля с новыми ами. Возвращены удалённые ранее символы тибетского письма; символы получили новые ы и были размещены в разных таблицах. Введён механизм суррогатных (англ. surrogate) символов. Выделено место для плоскостей (англ. planes) 15 и 16[24]
2.1[25] Май 1998 ISO/IEC 10646-1:1993, Amendments 5, 6, 7, два символа из Amendment 18 25 38 952 Добавлен символ евро[26]
3.0[27] Сентябрь 1999 ISBN 0-201-61633-5 ISO/IEC 10646-1:2000 38 49 259 Добавлены письмо чероки, эфиопское письмо, кхмерское письмо, монгольские письменности, бирманское письмо, огамическое письмо, руны, сингальское письмо, сирийское письмо, тана, канадское слоговое письмо и письмо и, а также символы шрифта Брайля[28]
3.1[29] Март 2001 ISO/IEC 10646-1:2000

ISO/IEC 10646-2:2001

41 94 205 Добавлены дезеретское письмо, готское письмо и староитальянское письмо[en], а также символы западной и византийской музыки, 42 711 унифицированных идеограмм китайского, японского и корейского письма[en][30]
3.2[31] Март 2002 ISO/IEC 10646-1:2000 и Amendment 1

ISO/IEC 10646-2:2001

45 95 221 Добавлены письмо бухид, хануноо[en], байбайин и письмо тагбанва[32]
4.0[33] Апрель 2003 ISBN 0-321-18578-1 ISO/IEC 10646:2003 52 96 447 Добавлены кипрское письмо, письмо лимбу, линейное письмо Б, сомалийское письмо, алфавит шоу, письмо лы и угаритское письмо, а также символы гексаграмм[34]
4.1[35] Март 2005 ISO/IEC 10646:2003 и Amendment 1 59 97 720 Добавлены письмо лонтара, глаголица, письмо кхароштхи, новое письмо лы, древнеперсидская клинопись, силхетское нагари и древнеливийское письмо. Символы коптского письма были отделены от символов греческого письма. Также добавлены символы старых греческих цифр и музыкальные символы Древней Греции[36]
5.0[37] Июль 2006 ISBN 0-321-48091-0 ISO/IEC 10646:2003, Amendments 1, 2, четыре символа из Amendment 3 64 99 089 Добавлены балийское письмо, клинопись, письмо нко, монгольское квадратное письмо и финикийское письмо[38]
5.1[39] Апрель 2008 ISO/IEC 10646:2003 и Amendments 1, 2, 3, 4 75 100 713 Добавлены карийское письмо, чамская письменность, письмо кая-ли, письмо лепча, ликийское письмо, лидийское письмо, письмо ол-чики, реджангское письмо, письмо саураштра, сунданское письмо и письмо ваи. Добавлены символы фестского диска, символы костей для маджонга и домино, заглавная буква эсцет (ẞ), а также буквы латиницы, использовавшиеся в средневековых рукописях для аббревиации[en]. Новыми символами дополнен набор символов бирманского письма[40]
5.2[41] Октябрь 2009 ISO/IEC 10646:2003 и Amendments 1, 2, 3, 4, 5, 6 90 107 361 Добавлены авестийское письмо, письмо бамум, египетское иероглифическое письмо (по списку Гардинера[en], содержащему 1071 символ), имперское арамейское письмо, пахлевийское эпиграфическое письмо[en], парфянское эпиграфическое письмо[en], яванское письмо, письмо кайтхи, письмо лису, письмо манипури, южноаравийское письмо, древнетюркское руническое письмо, самаритянское письмо, письмо ланна и письмо тай-вьет[en]. Добавлены 4149 новых унифицированных идеограмм китайского, японского и корейского письма[en] (CJK-C), символы ведийского письма, а также расширен набор символов чамо старого хангыля[42]
6.0[43] Октябрь 2010 ISO/IEC 10646:2010 и символ индийской рупии 93 109 449 Добавлены батакское письмо, письмо брахми, мандейское письмо. Добавлены символы игральных карт, дорожных знаков, географических карт, алхимии, эмотикона и эмодзи, а также 222 унифицированные идеограммы китайского, японского и корейского письма[en] (CJK-D)[44]
6.1[45] Январь 2012 ISO/IEC 10646:2012 100 110 181 Добавлены письмо чакма, мероитский курсив и мероитские иероглифы, письмо мяо, письмо шарада, письмо соранг-сомпенг[en] и письмо такри[46]
6.2[47] Сентябрь 2012 ISO/IEC 10646:2012 и символ турецкой лиры 100 110 182 Добавлен символ турецкой лиры, валюты Турции[48]
6.3[49] Сентябрь 2013 ISO/IEC 10646:2012 и шесть символов 100 110 187 Добавлено пять символов для форматирования двунаправленного текста[50]
7.0[51] 16 июня 2014 ISO/IEC 10646:2012, Amendments 1, 2 и символ рубля 123 113 021 Добавлены письмо басса, агванское письмо, стенография Дюплойе, эльбасанское письмо, письмо грантха, письмо ходжики[en], письменность худавади[en], линейное письмо А, письмо махаджани[en], манихейское письмо, письмо кикакуи, письмо моди, письмо мро[en], набатейское письмо, северноаравийское письмо, древнепермское письмо, письмо пахау, пальмирское письмо, письмо по чин хо[en], письмо псалтирь пехлеви[en], сиддхаматрика, письмо тирхута, варанг-кшити и орнамент дингбат[en], а также символ российского рубля[52]
8.0[53] 17 июня 2015 ISO/IEC 10646:2014, Amendment 1, символ лари, 9 унифицированных идеограмм ККЯ, 41 эмодзи 120 737 Добавлены письмо ахом, анатолийские иероглифы, письмо хатран, письмо мултани, венгерские руны, SignWriting, 5776 Унифицированные идеограммы ККЯ — расширение E, строчные буквы письма чероки, буквы латиницы для немецкой диалектологии, 41 эмодзи, а также пять символов изменения цвета кожи для эмотиконов. Добавлен символ лари[54]
9.0[55] 21 июня 2016 ISO/IEC 10646:2014, Amendments 1, 2, адлам, нева, японские символы для ТВ, 74 эмодзи и символа 128 237 Добавлены письмо адлам, письмо бхайкшуки, письмо марчен, письмо нева, письмо осейдж, тангутское письмо, а также 72 эмодзи и японские символы для телевидения[56]
10.0[57] 20 июня 2017 ISO/IEC 10646:2017, 56 эмодзи, 285 символов хэнтайганы, 3 символа квадратного письма Дзанабадзара 136 755 Добавлены квадратное письмо Дзанабадзара, письмо соёмбо, гонди Масарама, письмо нюй-шу, письмо хэнтайгана, 7494 Унифицированные идеограммы ККЯ — расширение F, а также 56 эмодзи[58]
11.0 Июнь 2018 ISBN 978-1-936213-19-1 ISO/IEC 10646:2017 146 137 439
Примечания
  1. Включая символы графические (англ. graphic), управляющие (англ. control) и символы форматирования (англ. format); не включая символы private-use, noncharacters и суррогаты (англ. surrogate code points).

овое пространство[ | ]

Хотя формы записи UTF-8 и UTF-32 позволяют ировать до 231 (2 147 483 648) овых позиций, было принято решение использовать лишь 1 112 064 для совместимости с UTF-16. Впрочем, даже и этого на текущий момент более чем достаточно — в версии 10.0 используется всего 136 690 овых позиций.

овое пространство разбито на 17 плоскостей (англ. planes) по 216 (65 536) символов. Нулевая плоскость (plane 0) называется базовой (basic) и содержит символы наиболее употребительных письменностей. Остальные плоскости — дополнительные (supplementary). Первая плоскость (plane 1) используется в основном для исторических письменностей, вторая (plane 2) — для редко используемых иероглифов китайского письма (ККЯ), третья (plane 3) зарезервирована для архаичных китайских иероглифов[59]. Плоскости 15 и 16 выделены для частного употребления[7].

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

Система ирования[ | ]

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

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

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

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

Политика консорциума[ | ]

Консорциум не создаёт нового, а констатирует сложившийся порядок вещей[60]. Например, картинки «эмодзи» были добавлены потому, что японские операторы мобильной связи широко их использовали. Для этого добавление символа проходит через сложный процесс[60]. И, например, символ российского рубля прошёл его за три месяца, как только получил официальный статус, причём до этого он много лет де-факто использовался и его отказывались включить в Юни.

Товарные знаки ируют только в порядке исключения. Так, в Юние нет флага Windows или яблока Apple.

Как только символ появился в ировке, он никогда не сдвинется и не исчезнет. Если же потребуется изменить порядок символов, это делается не переменой позиций, а национальным порядком сортировки. Есть и другие, более тонкие гарантии стабильности — например, не будут меняться таблицы нормализации[61].

Объединение и дублирование символов[ | ]

Один и тот же символ может иметь несколько форм; в Юни эти формы входят одной овой позицией:

  • если это сложилось исторически. Например, у арабских букв есть четыре формы: обособленная, в начале, в середине и в конце[62];
  • либо если в одном языке принята одна форма, а в другом — другая. Болгарская кириллица отличается от русской, а китайские иероглифы — от японских.

С другой стороны, если исторически в шрифтах у разных форм начертания были разные функции, то они остаются разными и в Юние, с разными овыми позициями. Например, строчная греческая сигма имеет две формы, и в Юние у них разные ы; буква расширенной латиницы Å (A с кружком) и знак ангстрема Å, греческая буква μ и обозначение приставки «микро-» µ — тоже имеют разные овые позиции.

Конечно же, похожие символы в неродственных письменностях также ставятся в разные овые позиции. Например, буква А в латинице, кириллице, греческом и чероки — разные символы.

Крайне редко один и тот же символ ставится в две разные овые позиции для упрощения обработки текста. Математический штрих и такой же штрих для индикации мягкости звуков — разные символы, второй считается буквой.

Комбинируемые символы[ | ]

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

Cимволы в Юние подразделяются на базовые (англ. base characters) и комбинируемые (англ. combining characters). Комбинируемые символы обычно следуют за базовым и изменяют его отображение определённым образом. К комбинируемым символам, например, относятся диакритические знаки, знаки ударения. Например, русскую букву «Й» в Юние можно записать в виде базового символа «И» (U+0418) и комбинируемого символа « ̆» (U+0306), отображаемого над базовым.

Комбинируемые символы помечены в таблицах символов Юниа особыми категориями:

  • Nonspacing Mark — безинтервальный (непротяжённый) знак; таковые обычно отображаются над или под базовым символом и не занимают отдельной горизонтальной позиции (интервала) в отображаемой строке;
  • Enclosing Mark — обрамляющий знак; эти символы также не занимают отдельной горизонтальной позиции (интервала) в отображаемой строке, но отображаются сразу с нескольких сторон базового символа;
  • Spacing Combining Mark — интервальный (протяжённый) комбинируемый знак; таковые, как и базовый символ, занимают отдельную горизонтальную позицию (интервал) в отображаемой строке.

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

Алгоритмы нормализации[ | ]

Из-за наличия в Юние комбинируемых символов одни и те же знаки письменности можно представить различными ами. Так, например, букву "Й" в примере выше можно записать как отдельным символом, так и сочетанием базового и комбинированного. Из-за этого сравнение строк байт за байтом становится невозможным. Алгоритмы нормализации (англ. normalization forms) решают эту проблему, выполняя приведение символов к определённому стандартному виду. Приведение осуществляется путём замены символов на эквивалентные с использованием таблиц и правил. «Декомпозицией» называется замена (разложение) одного символа на несколько составляющих символов, а «композицией», наоборот, — замена (соединение) нескольких составляющих символов на один символ.

В стандарте Юниа определены четыре алгоритма нормализации текста: NFD, NFC, NFKD и NFKC.

NFD[ | ]

NFD, англ. normalization form D («D» от англ. decomposition), форма нормализации D — каноническая декомпозиция — алгоритм, согласно которому выполняется рекурсивное разложение составных символов (англ. precomposed characters) на последовательность из одного или нескольких простых символов в соответствии с таблицами декомпозиции. Рекурсивное потому, что в процессе разложения составной символ может быть разложен на несколько других, некоторые из которых тоже являются составными, и к которым применяется дальнейшее разложение.

Примеры:

Ω
U+2126
Ω
U+03A9
Å
U+00C5
A
U+0041
̊
U+030A
U+1E69
s
U+0073
̣
U+0323
̇
U+0307
ḍ̇
U+1E0B U+0323
d
U+0064
̣
U+0323
̇
U+0307
q̣̇
U+0071 U+0307 U+0323
q
U+0071
̣
U+0323
̇
U+0307

NFC[ | ]

NFC, англ. normalization form C («C» от англ. composition), форма нормализации C — алгоритм, согласно которому последовательно выполняются каноническая декомпозиция и каноническая композиция. Сначала каноническая декомпозиция (алгоритм NFD) приводит текст к форме D. Затем каноническая композиция — операция, обратная NFD, обрабатывает текст от начала к концу с учётом следующих правил:

  • символ S считается начальным, если имеет нулевой класс комбинируемости (англ. combining class of zero) согласно таблице символов Юниа;
  • в любой последовательности символов, начинающейся с символа S, символ C блокируется от S, только если между S и C есть какой-либо символ B, который либо является начальным, либо имеет одинаковый или больший класс комбинируемости, чем C. Это правило распространяется только на строки, прошедшие каноническую декомпозицию;
  • символ считается первичным композитом, если имеет каноническую декомпозицию в таблице символов Юниа (или каноническую декомпозицию для хангыля и он не входит в список исключений);
  • символ X может быть первично совмещён с символом Y, если и только если существует первичный композит Z, канонически эквивалентный последовательности <X, Y>;
  • если очередной символ C не блокируется последним встреченным начальным базовым символом L и он может быть успешно первично совмещён с ним, то L заменяется на композит L-C, а C удаляется.

Пример:

o
U+006F
̂
U+0302
ô
U+00F4

NFKD[ | ]

NFKD, англ. normalization form KD, форма нормализации KD — совместимая декомпозиция — алгоритм, согласно которому последовательно выполняются каноническая декомпозиция и замены символов текста по таблицам совместимой декомпозиции. Таблицы совместимой декомпозиции предусматривают замену на почти эквивалентные символы[63]:

  • похожих на буквы (ℍ и ℌ);
  • обведённых кружками (①);
  • с изменёнными размерами (カ и カ);
  • повёрнутых (︷ и {);
  • степеней (⁹ и ₉);
  • дробей (¼);
  • других (™).

Примеры:

U+210d
H
U+0048
U+2460
1
U+0031
U+FF76
U+30AB
U+FE37
{
U+007B
U+2079
9
U+0039
¼
U+00BC
1 4
U+0031 U+2044 U+0034
U+2122
T M
U+0054 U+004D

NFKC[ | ]

NFKC, англ. normalization form KC, форма нормализации KC — алгоритм, согласно которому последовательно выполняются совместимая декомпозиция (алгоритм NFKD) и каноническая композиция (алгоритм NFC).

Примеры[ | ]

Исходный текст NFD NFC NFKD NFKC
U+FB01
U+FB01
U+FB01
f i
U+0066 U+0069
f i
U+0066 U+0069
2
U+0032 U+2075
2
U+0032 U+2075
2
U+0032 U+2075
2 5
U+0032 U+0035
2 5
U+0032 U+0035
ẛ̣
U+1E9B U+0323
ſ ̣ ̇
U+017F U+0323 U+0307
̣
U+1E9B U+0323
s ̣ ̇
U+0073 U+0323 U+0307
U+1E69
й
U+0439
и ̆
U+0438 U+0306
й
U+0439
и ̆
U+0438 U+0306
й
U+0439
ё
U+0451
е ̈
U+0435 U+0308
ё
U+0451
е ̈
U+0435 U+0308
ё
U+0451
А
U+0410
А
U+0410
А
U+0410
А
U+0410
А
U+0410
U+304C
U+304B U+3099
U+304C
U+304B U+3099
U+304C
U+2167
U+2167
U+2167
V I I I
U+0056 U+0049 U+0049 U+0049
V I I I
U+0056 U+0049 U+0049 U+0049
ç
U+00E7
c ̧
U+0063 U+0327
ç
U+00E7
c ̧
U+0063 U+0327
ç
U+00E7

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

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

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

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

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

и другие.

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

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

Государственные флаги не включены в Юни напрямую. Для их ирования используются пары из 26 буквенных символов, предназначенных для представления двухбуквенных ов стран по стандарту ISO 3166-1 alpha-2. Эти буквы заированы в диапазоне от U+1F1E6 🇦 regional indicator symbol letter a (HTML &#127462;) до U+1F1FF 🇿 regional indicator symbol letter z (HTML &#127487;).

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

ISO/IEC 10646[ | ]

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

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

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

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

Различия стандартов Юни и ISO/IEC 10646:

  • небольшие различия в терминологии;
  • ISO/IEC 10646 не включает разделы, необходимые для полноценной реализации поддержки Юниа:
    • нет данных о двоичном ировании символов;
    • нет описания алгоритмов сравнения (англ. collation) и отрисовки (англ. rendering) символов;
    • нет перечня свойств символов (например, нет перечня свойств, необходимых для реализации поддержки двунаправленного (англ. bi-directional) письма).

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

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

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

Punycode — другая форма ирования последовательностей Unicode-символов в так называемые ACE-последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах.

UTF-8[ | ]

UTF-8 — представление Юниа, обеспечивающее наибольшую компактность и обратную совместимость с 7-битной системой ASCII; текст, состоящий только из символов с номерами меньше 128, при записи в UTF-8 превращается в обычный текст ASCII и может быть отображён любой программой, работающей с ASCII; и наоборот, текст, заированный 7-битной ASCII может быть отображён программой, предназначенной для работы с UTF-8. Остальные символы Юниа изображаются последовательностями длиной от 2 до 4 байт, в которых первый байт всегда имеет маску 11xxxxxx, а остальные — 10xxxxxx. В UTF-8 не используются суррогатные пары.

Формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в ОС Plan 9[64]. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.

UTF-16 и UTF-32[ | ]

UTF-16 — ировка, позволяющая записывать символы Юниа в диапазонах U+0000...U+D7FF и U+E000...U+10FFFF (общим количеством 1 112 064). При этом каждый символ записывается одним или двумя словами (суррогатная пара). ировка UTF-16 описана в приложении Q к международному стандарту ISO/IEC 10646, а также ей посвящён документ IETF RFC 2781 под названием «UTF-16, an encoding of ISO 10646».

UTF-32 — способ представления Юниа, при котором каждый символ занимает ровно 4 байта. Главное преимущество UTF-32 перед ировками переменной длины заключается в том, что символы Юни в ней непосредственно индексируемы, поэтому найти символ по номеру его позиции в файле можно чрезвычайно быстро, и получение любого символа n-й позиции при этом является операцией, занимающей всегда одинаковое время. Это также делает замену символов в строках UTF-32 очень простой. Напротив, ировки с переменной длиной требуют последовательного доступа к символу n-й позиции, что может быть очень затратной по времени операцией. Главный недостаток UTF-32 — это неэффективное использование пространства, так как для хранения любого символа используется четыре байта. Символы, лежащие за пределами нулевой (базовой) плоскости ового пространства, редко используются в большинстве текстов. Поэтому удвоение, в сравнении с UTF-16, занимаемого строками в UTF-32 пространства, зачастую не оправдано.

Порядок байтов[ | ]

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

Маркер последовательности байтов[ | ]

Для указания на использование Юниа, в начале текстового файла или потока может передаваться Маркер последовательности байтов (англ. byte order mark (BOM)) — символ U+FEFF (неразрывный пробел нулевой ширины). По его виду можно легко различить как формат представления Юниа, так и последовательность байтов. Маркер последовательности байтов может принимать следующий вид:

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

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

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

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

Реализации[ | ]

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

В операционных системах семейства Windows NT для внутреннего представления имён файлов и других системных строк используется двухбайтовая ировка UTF-16LE. Системные вызовы, принимающие строковые параметры, существуют в однобайтном и двухбайтном вариантах. Подробнее см. в статье Юни в операционных системах семейства Microsoft Windows.

UNIX-подобные операционные системы, в том числе GNU/Linux, BSD, OS X, используют для представления Юниа ировку UTF-8. Большинство программ может работать с UTF-8 как с традиционными однобайтными ировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно переируются в UCS-4, так что каждому символу соответствует машинное слово.

Одной из первых успешных коммерческих реализаций Юниа стала среда программирования Java. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Это решение увеличило расход памяти, но позволило вернуть в программирование важную абстракцию: произвольный одиночный символ (тип char). В частности, программист мог работать со строкой, как с простым массивом. К сожалению, успех не был окончательным, Юни перерос ограничение в 16 бит и к версии J2SE 5.0 произвольный символ снова стал занимать переменное число единиц памяти — один char или два (см. суррогатная пара).

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

Методы ввода[ | ]

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

Microsoft Windows[ | ]

Хотя, начиная с Windows 2000, служебная программа «Таблица символов» (charmap.exe) поддерживает символы Юниа и позволяет копировать их в буфер обмена, эта поддержка ограничена только базовой плоскостью (ы символов U+0000…U+FFFF). Символы с ами от U+10000 «Таблица символов» не отображает.

Похожая таблица есть, например, в Microsoft Word.

Иногда можно набрать шестнадцатеричный , нажать Alt+X, и будет заменён на соответствующий символ, например, в WordPad, Microsoft Word. В редакторах Alt+X выполняет и обратное преобразование.

Во многих программах MS Windows, чтобы получить символ Unicode, нужно при нажатой клавише Alt набрать десятичное значение а символа на цифровой клавиатуре. Например, полезными при наборе кириллических текстов будут комбинации Alt+0171 («), Alt+0187 (») и Alt+0769 (знак ударения). Интересны также комбинации Alt+0133 (…) и Alt+0151 (—).

Macintosh[ | ]

В Mac OS 8.5 и более поздних версиях поддерживается метод ввода, называемый «Unicode Hex Input». При зажатой клавише Option требуется набрать четырёхзначный шестнадцатеричный требуемого символа. Этот метод позволяет вводить символы с ами, большими U+FFFF, используя пары суррогатов; такие пары операционной системой будут автоматически заменены на одиночные символы. Этот метод ввода перед использованием нужно активизировать в соответствующем разделе системных настроек и затем выбрать как текущий метод ввода в меню клавиатуры.

Начиная с Mac OS X 10.2, существует также приложение «Character Palette», позволяющее выбирать символы из таблицы, в которой можно выделять символы определённого блока или символы, поддерживаемые конкретным шрифтом.

GNU/Linux[ | ]

В GNOME также есть утилита «Таблица символов» (ранее gucharmap), позволяющая отображать символы определённого блока или системы письма и предоставляющая возможность поиска по названию или описанию символа. Когда нужного символа известен, его можно ввести в соответствии со стандартом ISO 14755: при зажатых клавишах Ctrl+⇧ Shift ввести шестнадцатеричный (начиная с некоторой версии GTK+, ввод а нужно предварить нажатием клавиши «U»). Вводимый шестнадцатеричный может иметь до 32 бит в длину, позволяя вводить любые символы Юниа без использования суррогатных пар.

Все приложения X Window, включая GNOME и KDE, поддерживают ввод при помощи клавиши Compose. Для клавиатур, на которых нет отдельной клавиши Compose, для этой цели можно назначить любую клавишу — например, Caps Lock.

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

Mozilla Firefox для Linux поддерживает ввод символов по ISO 14755.

Проблемы Юниа[ | ]

В Юние английское «a» и польское «a» — один и тот же символ. Точно так же одним и тем же символом (но отличающимся от «a» латинского) считаются русское «а» и сербское «а». Такой принцип ирования не универсален; по-видимому, решения «на все случаи жизни» вообще не может существовать.

  • Тексты на китайском, корейском и японском языках имеют традиционное написание сверху вниз, начиная с правого верхнего угла. Переключение горизонтального и вертикального написания для этих языков не предусмотрено в Юние — это должно осуществляться средствами языков разметки или внутренними механизмами текстовых процессоров.
  • Наличие или отсутствие в Юние разных начертаний одного и того же символа в зависимости от языка. Нужно следить, чтобы текст всегда был правильно помечен как относящийся к тому или другому языку.
    Так, китайские иероглифы могут иметь разные начертания в китайском, японском (кандзи) и корейском (ханча), но при этом в Юние обозначаются одним и тем же символом (так называемая CJK-унификация), хотя упрощённые и полные иероглифы всё же имеют разные ы.
    Аналогично, русский и сербский языки используют разное начертание курсивных букв п и т (в сербском они выглядят как и и ш, см. сербский курсив).
  • Перевод из строчных букв в заглавные тоже зависит от языка. Например: в турецком существуют буквы İi и Iı — таким образом, турецкие правила изменения регистра конфликтуют с английскими, которые предписывают «i» переводить в «I». Подобные проблемы есть и в других языках — например, в канадском диалекте французского языка регистр переводится немного не так, как во Франции[65].
  • Даже с арабскими цифрами есть определённые типографские тонкости: цифры бывают «прописными» и «строчными», пропорциональными и моноширинными[66] — для Юниа разницы между ними нет. Подобные нюансы остаются за программным обеспечением.

Некоторые недостатки связаны не с самим Юниом, а с возможностями обработчиков текста.

  • Файлы нелатинского текста в Юние всегда занимают больше места, так как один символ ируется не одним байтом, как в различных национальных ировках, а последовательностью байтов (исключение составляет UTF-8 для языков, алфавит которых укладывается в ASCII, а также наличие в тексте символов двух и более языков, алфавит которых не укладывается в ASCII[67]). Файл шрифта, необходимый для отображения всех символов таблицы Юни, занимает сравнительно много места в памяти и требует бо́льших вычислительных ресурсов, чем шрифт только одного национального языка пользователя[68]. С увеличением мощности компьютерных систем и удешевлением памяти и дискового пространства эта проблема становится всё менее существенной; тем не менее, она остаётся актуальной для портативных устройств, например, для мобильных телефонов.
  • Хотя поддержка Юниа реализована в наиболее распространённых операционных системах, до сих пор не всё прикладное программное обеспечение поддерживает корректную работу с ним. В частности, не всегда обрабатываются метки порядка байтов (BOM) и плохо поддерживаются диакритические символы. Проблема является временной и есть следствие сравнительной новизны стандартов Юниа (в сравнении с однобайтовыми национальными ировками).
  • Производительность всех программ обработки строк (в том числе и сортировок в БД) снижается при использовании Юниа вместо однобайтовых ировок.

Некоторые редкие системы письма всё ещё не представлены должным образом в Юние. Изображение «длинных» надстрочных символов, простирающихся над несколькими буквами, как, например, в церковнославянском языке, пока не реализовано.

«Юни» или «Уни»?[ | ]

«Unicode» — одновременно и имя собственное (или часть имени, например, Unicode Consortium), и имя нарицательное, происходящее из английского языка.

На первый взгляд предпочтительнее использовать написание «Уни». В русском языке уже есть морфемы «уни-» (слова с латинским элементом «uni-» традиционно переводились и писались через «уни-»: универсальный, униполярный, унификация, униформа) и «». Напротив, торговые марки, заимствованные из английского языка, обычно передаются посредством практической транскрипции, в которой деэтимологизированное сочетание букв «uni-» записывается в виде «юни-» («Юнилевер», «Юникс» и т. п.), то есть точно так же, как в случае с побуквенными сокращениями, вроде UNICEF «United Nations International Children’s Emergency Fund» — ЮНИСЕФ.

Написание «Юни» уже твёрдо вошло в русскоязычные тексты. В Википедии используется более распространённый вариант. В MS Windows используется вариант «Юни».

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

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

См. также[ | ]

Примечания[ | ]

  1. 1 2 Unicode Transcriptions (англ.). Проверено 10 мая 2010. Архивировано 22 августа 2011 года.
  2. Уни в словаре Paratype
  3. The Unicode® Standard: A Technical Introduction. Проверено 4 июля 2010. Архивировано 22 августа 2011 года.
  4. History of Unicode Release and Publication Dates. Проверено 4 июля 2010. Архивировано 22 августа 2011 года.
  5. The Unicode Consortium. Проверено 4 июля 2010. Архивировано 22 августа 2011 года.
  6. 1 2 3 Foreword. Проверено 4 июля 2010. Архивировано 22 августа 2011 года.
  7. 1 2 General Structure. Проверено 5 июля 2010. Архивировано 22 августа 2011 года.
  8. European Alphabetic Scripts. Проверено 4 июля 2010. Архивировано 22 августа 2011 года.
  9. Что такое Unicode?
  10. Unicode 88. Проверено 8 июля 2010. Архивировано 22 августа 2011 года.
  11. Unicode and Microsoft Windows NT (англ.). Microsoft Support. Архивировано 22 августа 2011 года.
  12. Unicode используется почти на 50% веб-сайтов. Архивировано 22 августа 2011 года.
  13. The Unicode Consortium. The Unicode Standard, Version 10.0.0 (англ.). Mountain View, CA: The Unicode Consortium (2017). Проверено 2 июля 2017.
  14. The Unicode Blog: Feedback on Draft Additional Repertoire for Amendments to ISO/IEC 10646:2017 (5th edition)
  15. History of Unicode Release and Publication Dates
  16. Enumerated Versions
  17. About Versions
  18. Unicode® 1.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  19. Unicode Data 1.0.0 (англ.). Проверено 4 декабря 2017.
  20. Unicode Data 1.0.1 (англ.). Проверено 4 декабря 2017.
  21. Unicode® 1.1 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  22. Unicode Data 1995 (англ.). Проверено 4 декабря 2017.
  23. Unicode 2.0.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  24. Unicode Data 2.0.14 (англ.). Проверено 4 декабря 2017.
  25. Unicode 2.1.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  26. Unicode Data 2.1.2 (англ.). Проверено 4 декабря 2017.
  27. Unicode 3.0.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  28. Unicode Data 3.0.0 (англ.). Проверено 4 декабря 2017.
  29. Unicode 3.1.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  30. Unicode Data 3.1.0 (англ.). Проверено 4 декабря 2017.
  31. Unicode 3.2.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  32. Unicode Data 3.2.0 (англ.). Проверено 4 декабря 2017.
  33. Unicode 4.0.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  34. Unicode Data 4.0.0 (англ.). Проверено 4 декабря 2017.
  35. Unicode 4.1.0 (англ.). Unicode Consortium[en]. Проверено 8 декабря 2017.
  36. Unicode Data 4.1.0 (англ.). Проверено 4 декабря 2017.
  37. Unicode 5.0.0 (англ.). Unicode Consortium[en] (14 July 2006). Проверено 8 декабря 2017.
  38. Unicode Data 5.0.0 (англ.). Проверено 4 декабря 2017.
  39. Unicode 5.1.0 (англ.). Unicode Consortium[en] (4 April 2008). Проверено 8 декабря 2017.
  40. Unicode Data 5.1.0 (англ.). Проверено 4 декабря 2017.
  41. Unicode® 5.2.0 (англ.). Unicode Consortium[en] (1 October 2009). Проверено 8 декабря 2017.
  42. Unicode Data 5.2.0 (англ.). Проверено 4 декабря 2017.
  43. Unicode® 6.0.0 (англ.). Unicode Consortium[en] (11 October 2010). Проверено 8 декабря 2017.
  44. Unicode Data 6.0.0 (англ.). Проверено 4 декабря 2017.
  45. Unicode® 6.1.0 (англ.). Unicode Consortium[en] (31 January 2012). Проверено 8 декабря 2017.
  46. Unicode Data 6.1.0 (англ.). Проверено 4 декабря 2017.
  47. Unicode® 6.2.0 (англ.). Unicode Consortium[en] (26 September 2012). Проверено 7 декабря 2017.
  48. Unicode Data 6.2.0 (англ.). Проверено 4 декабря 2017.
  49. Unicode® 6.3.0 (англ.). Unicode Consortium[en] (30 September 2012). Проверено 7 декабря 2017.
  50. Unicode Data 6.3.0 (англ.). Проверено 4 декабря 2017.
  51. Unicode® 7.0.0 (англ.). Unicode Consortium[en] (16 June 2014). Проверено 8 декабря 2017.
  52. Unicode Data 7.0.0 (англ.). Проверено 4 декабря 2017.
  53. Unicode® 8.0.0 (англ.). Unicode Consortium[en] (17 June 2015). Проверено 8 декабря 2017.
  54. Unicode Data 8.0.0 (англ.). Проверено 4 декабря 2017.
  55. Unicode® 9.0.0 (англ.). Unicode Consortium[en] (21 June 2016). Проверено 8 декабря 2017.
  56. Unicode Data 9.0.0 (англ.). Проверено 6 декабря 2017.
  57. Unicode® 10.0.0 (англ.). Unicode Consortium[en] (27 June 2017). Проверено 8 декабря 2017.
  58. Unicode Data 10.0.0 (англ.). Проверено 7 декабря 2017.
  59. Roadmap to the TIP (Tertiary Ideographic Plane)
  60. 1 2 FAQ — Emoji & Dingbats
  61. Unicode Character Encoding Stability Policy
  62. Впоследствии конкретным формам арабских букв отвели отдельные позиции. Но всё равно рекомендуется писать по-арабски «общими» вариантами букв.
  63. Нормализация Unicode
  64. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (англ.)
  65. Регистр в Unicode — это непросто
  66. В большинстве шрифтов для ПК реализованы «прописные» (маюскульные) моноширинные цифры.
  67. В некоторых случаях документ (не простой текст) в Юние может занимать существенно меньше места, чем документ в однобайтовой ировке. Например, если некая веб-страница содержит примерно поровну русского и греческого текста, то в однобайтовой ировке придётся либо русские, либо греческие буквы записывать, используя возможности формата документов, в виде ов с амперсандом, которые занимают 6—7 байт на символ (при использовании десятичных ов), то есть в среднем на букву придётся 3,5—4 байта, в то время как UTF-8 занимает только 2 байта на греческую или русскую букву.
  68. Один из файлов шрифтов Arial Unicode имеет размер 24 мегабайта; существует Times New Roman размером 120 мегабайт, он содержит количество символов, близкое к 65536.

Ссылки[ | ]