Unicode

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:53, 24 декабря 2016.
Версия от 12:53, 24 декабря 2016; andrey nikolaev (обсуждение | вклад) (Источники)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для совместимости со старыми 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 %.

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

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

Первый стандарт выпущен в 1991 году, последний — в 2016, следующий ожидается летом 2017 года. Стандарты версий 1.0—5.0 публиковались как книги, и имеют ISBN. Номер версии стандарта составлен из трёх цифр (например, «4.0.1»). Третью цифру меняют при внесении в стандарт небольших изменений, не добавляющих новых символов.

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

ISO/IEC 10646-2:2001

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

ISO/IEC 10646-2:2001

45 95 221 Добавлены символы следующих письменностей: письмо бухид, письмо hanunó'o, байбайин и письмо тагбанва
4.0 Апрель 2003 ISBN 0-321-18578-1 ISO/IEC 10646:2003 52 96 447 Добавлены символы следующих письменностей: кипрское письмо, письмо лимбу, линейное письмо Б, сомалийское письмо, алфавит шоу, письмо tai le и угаритское письмо, а также символы гексаграмм
4.1 Март 2005 ISO/IEC 10646:2003 и Amendment 1 59 97 720 Добавлены символы следующих письменностей: письмо лонтара, глаголица, письмо кхароштхи, новое письмо лы, древнеперсидская клинопись, силхетское нагари и древнеливийское письмо. Символы коптского письма были отделены от символов греческого письма. Также добавлены символы старых греческих цифр и музыкальные символы
5.0 Июль 2006 ISBN 0-321-48091-0 ISO/IEC 10646:2003, Amendments 1, 2, четыре символа из Amendment 3 64 99 089 Добавлены символы следующих письменностей: балийское письмо, клинопись, письмо нко, монгольское квадратное письмо и финикийское письмо
5.1 Апрель 2008 ISO/IEC 10646:2003 и Amendments 1, 2, 3, 4 75 100 713 Добавлены символы следующих письменностей: карийское письмо, чамская письменность, письмо кая-ли, письмо лепча, ликийское письмо, лидийское письмо, письмо ол-чики, реджангское письмо, письмо саураштра, сунданское письмо и письмо ваи. Добавлены символы с фестского диска, символы для фишек игр маджонг и домино, заглавная буква эсцет (ß), а также символы — аббревиатур scribal, используемых в средневековых рукописях. Новыми символами дополнен набор символов бирманского письма
5.2 Октябрь 2009 ISO/IEC 10646:2003 и Amendments 1, 2, 3, 4, 5, 6 90 107 361 Добавлены символы следующих письменностей: авестийское письмо, письмо бамум, египетское иероглифическое письмо (по списку Гардинера, содержащему 1071 символ), письмо imperial aramaic, письмо inscriptional pahlavi, письмо inscriptional parthian, яванское письмо, письмо кайтхи, письмо лису, письмо манипури, южноаравийское письмо, древнетюркское руническое письмо, самаритянское письмо, письмо ланна и письмо tai viet. Добавлены 4149 новых идеиграмм китайского, японского и корейского письма (CJK-C), символы ведийского письма, а также расширен набор символов Jamo старого хангыля
6.0 Октябрь 2010 ISO/IEC 10646:2010 и символ валюты Индии 93 109 449 Добавлены символы следующих письменностей: батакское письмо, письмо брахми, письмо mandaic. Добавлены символы игральных карт, дорожных знаков, географических карт, алхимии, эмотикона и эмодзи. Добавлены 222 идеограммы китайского, японского и корейского письма (CJK-D)
6.1 Январь 2012 ISO/IEC 10646:2012 100 110 181 Добавлены символы следующих письменностей: письмо чакма, мероитский рукописный шрифт и мероитские иероглифы, письмо мяо, письмо шарада, письмо sora sompeng и письмо такри
6.2 Сентябрь 2012 ISO/IEC 10646:2012 и символ турецкой валюты 100 110 182 Добавлен символ турецкой валюты
6.3 Сентябрь 2013 ISO/IEC 10646:2012 и шесть символов 100 110 187 Добавлено пять символов для форматирования двунаправленного текста
7.0 Июнь 2014 ISO/IEC 10646:2012, Amendments 1, 2 и символ рубля 123 113 021 Добавлены символы следующих письменностей: письмо басса, агванское письмо, письмо duployan, эльбасанское письмо, письмо грантха, письмо khojki, письменность khudawadi, линейное письмо А, письмо mahajani, письмо manichaean, письмо кикакуи, письмо моди, письмо mro, набатейское письмо, северноаравийское письмо, древнепермское письмо, письмо пахау, письмо palmyrene, письмо pau cin hau, письмо psalter pahlavi, сиддхаматрика, письмо тирхута, варанг-кшити и орнамент dingbat
8.0 Июнь 2015
9.0 21 июня 2016

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

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

Кодовое пространство разбито на 17 плоскостей по 216 (65 536) символов. Нулевая плоскость называется базовой и содержит символы наиболее употребительных письменностей. Остальные плоскости — дополнительные. Первая плоскость используется в основном для исторических письменностей, вторая — для редко используемых иероглифов китайского письма (ККЯ), третья зарезервирована для архаичных китайских иероглифов. Плоскости 15 и 16 выделены для частного употребления. Для обозначения символов Unicode используется запись вида «U+xxxx» (для кодов 0…FFFF), или «U+xxxxx» (для кодов 10000…FFFFF), или «U+xxxxxx» (для кодов 100000…10FFFF), где xxx — шестнадцатеричные цифры. Например, символ «я» (U+044F) имеет код 044F16= 110310.

Плоскости Юникода
Плоскость Название Диапазон символов
0 Базовая многоязыковая плоскость (Basic multilingual plane, BMP) U+0000…U+​FFFF
1 Дополнительная многоязыковая плоскость (Supplementary multilingual plane, SMP) U+10000…U+​1FFFF
2 Дополнительная иероглифическая плоскость (Supplementary ideographic plane, SIP) U+20000…U+​2FFFF
3 Третичная иероглифическая плоскость (Tertiary ideographic plane, TIP) U+30000…U+3FFFF
4—13 не используются U+40000…U+​DFFFF
14 Дополнительная плоскость особого назначения (Supplement­ary special-purpose plane, SSP) U+E0000…U+​EFFFF
15—16 Дополнительные области для частного использования (Supplement­ary private use area, SPUA-A/B) U+F0000…U+​10FFFF

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NFD

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

Примеры:

Å
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 считается начальным, если имеет класс модификации равный нулю согласно таблице символов Юникода;
  • в любой последовательности символов, начинающейся с символа 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 — совместимая декомпозиция — алгоритм, согласно которому последовательно выполняются каноническая декомпозиция и замены символов текста по таблицам совместимой декомпозиции. Таблицы совместимой декомпозиции предусматривают замену на почти эквивалентные символов:

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

Примеры:

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

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

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

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

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

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

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

Базовая многоязыковая плоскость

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

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

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

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

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

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

Источники