Предпосылки создания и развитие юникода. Кодировка Unicode Кодировка юникод таблица

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

110XXXXX 10XXXXXX,

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

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

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

110 10000 10 010110 2
или D0 96 16

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

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

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

Уникод или Юникод (от англ. слова Unicode ) является стандартом кодирования знаков-символов. Он даёт возможность быть представленными в кодировке почти всем письменным языкам.

В конце 1980-х роль стандарта закрепилась за 8-битными символами. 8-битные кодировки были представлены разными модификациями, число которых постоянно росло. Главным образом, это было результатом активного расширения спектра используемых языков. Имело место и стремление разработчиков придумать кодировку, претендующую хотя бы на частичную универсальность.

В итоге возникла необходимость заниматься решением нескольких проблем:

  • проблемы индикации документов в некорректной кодировке. Решить её было можно, либо последовательно внедряя методы указания применяемой кодировки, либо вводя единую кодировку для всех;
  • проблемы ограниченности пакета символов, решаемую либо путём переключения шрифтов в документе, либо внедряя расширенную кодировку;
  • проблемы трансформирования кодировки из одной в другую, которую представлялось возможным решить либо используя промежуточное преобразование (третья кодировка), включающую символы разных кодировок, либо составляя таблицы перекодировки для каждых двух кодировок;
  • проблемы дублирования отдельных шрифтов. Традиционно каждая кодировка предполагала наличие своего шрифта, даже когда кодировки полностью или частично совпадали в наборе символов. В какой-то мере проблема решалась с помощью «больших» шрифтов, из которых затем выбирались символы, нужные для конкретной кодировки. Но для того, чтобы определить степень соответствия, требовалось создать единый реестр символов.

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

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

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

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

Значение данной кодировки в веб-пространстве неумолимо растёт. Доля сайтов, применяющих Юникод, составляла в начале 2010 года почти 50 процентов.

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

Определение

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

Причины создания

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

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

  • эльфийские письмена, или «кракозябры»;
  • ограниченность набора символов;
  • проблема преобразования кодировок;
  • дублирование шрифтов.

Небольшой исторический экскурс

Представьте, что на дворе 80-е. Компьютерная техника еще не так распространена и имеет вид, отличный от сегодняшнего. В то время каждая ОС по-своему уникальна и доработана каждым энтузиастом под конкретные нужды. Необходимость обмена информацией превращается в дополнительную доработку всего на свете. Попытка прочитать документ, созданный под другой ОС, зачастую выводит на экран непонятный набор символов, и начинаются игры с кодировкой. Не всегда получается сделать это быстро, и порой необходимый документ удаётся открыть через полгода, а то и позже. Люди, которые часто обмениваются информацией, создают для себя таблицы преобразования. И вот работа над ними выявляет интересную деталь: создавать их нужно по двум направлениям: «из моей в твою» и обратно. Сделать банальную инверсию вычислений машина не может, для нее в правом столбце исходник, а в левом - результат, но никак не наоборот. Если появлялась необходимость использовать какие-либо специальные символы в документе, их необходимо было сначала добавить, а потом еще и объяснить партнеру, что ему нужно сделать, чтобы эти символы не превратились в «кракозябры». И не будем забывать, что под каждую кодировку приходилось разрабатывать или внедрять собственные шрифты, что приводило к созданию огромного количества дублей в ОС.

Представьте еще, что на странице шрифтов вы увидите 10 штук идентичных Times New Roman с маленькими пометками: для UTF-8, UTF-16, ANSI, UCS-2. Теперь вы понимаете, что разработка универсального стандарта была настоятельной необходимостью?

«Отцы-создатели»

Истоки создания Unicode следует искать в 1987 году, когда Джо Беккер из Xerox вместе с Ли Коллинзом и Марком Дэвисом из компании Apple начали исследования в сфере практического создания универсального набора символов. В августе 1988 года Джо Беккер опубликовал проект предложения по созданию 16-битной международной многоязычной системы кодирования.

Через несколько месяцев рабочая группа Unicode была расширена за счет включения Кена Уистлера и Майка Кернегана из RLG, Гленн Райт из Sun Microsystems и нескольких других специалистов, что позволило завершить работы по предварительному формированию единого стандарта кодирования.

Общее описание

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

Преимущества Unicode

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

С появлением "Юникода" отпала надобность использовать таблицы преобразования: как единый стандарт он просто сводил на нет их необходимость. Точно так же канули в Лету и «кракозябры» - единый стандарт сделал их невозможными, равно как и исключил необходимость создания дублей шрифтов.

Развитие Unicode

Конечно, прогресс не стоит на месте, и с момента первой презентации минуло уже 25 лет. Однако кодировка "Юникод" упрямо удерживает свои позиции в мире. Во многом это стало возможным благодаря тому, что он стал легко внедряемым и получил распространение, будучи признанным разработчикам проприетарного (платного) и открытого ПО.

При этом не стоит полагать, что сегодня нам доступна та же кодировка "Юникод", что и четверть века назад. На данный момент ее версия сменилась на 5.х.х, а количество кодируемых символов возросло до 231. От возможности использовать больший запас знаков отказались, чтобы всё еще сохранить поддержку для Unicode-16 (кодировки, где максимальное их количество ограничивалось цифрой 216). С момента своего появления и до версии 2.0.0 "Юникод-стандарт" увеличил количество символов, которые в него входили, практически в 2 раза. Рост возможностей продолжался и в последующие годы. К версии 4.0.0 уже появилась необходимость увеличить сам стандарт, что и было сделано. В результате "Юникод" обрел тот вид, в котором мы его знаем сегодня.

Что еще есть в Unicode?

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

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

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

Распространение стандарта

За 25 лет своей истории кодировка "Юникод" получила, вероятно, наибольшее распространение в мире. Под этот стандарт подгоняются также программы и web-страницы. О широте применения может говорить тот факт, что Unicode сегодня используют более 60 % интернет-ресурсов.

Теперь вам известно, когда появился стандарт "Юникод". Что это такое, вы также знаете и сможете оценить все значение изобретения, сделанного группой специалистов Unicode Inc. более 25 лет назад.

Верите вы или нет, но существует формат изображений, встроенных в браузер. Этот формат позволяет загружать изображения до того, как они понадобились, обеспечивает рендеринг изображения на обычных или retina экранах и позволяет добавлять к изображениям CSS. ОК, это не совсем правда. Это не формат изображения, хотя все остальное остается в силе. Используя его, вы можете создавать иконки, независимые от разрешения, не требующие время на загрузку и стилизуемые с помощью CSS.

Что такое Юникод?

Юникод это возможность корректно отображать буквы и знаки пунктуации из различных языков на одной страницы. Он невероятно полезен: пользователи смогут работать с вашим сайтом по всему миру и он будет показывать то, что вы хотите - это может быть французский язык с диакритическими знаками или Kanji .

Юникод продолжает развиваться: сейчас актуальна версия 8.0 в которой более 120 тысяч символов (в оригинальной статье, опубликованной в начале 2014 года, речь шла о версии 6.3 и 110 тысячах символов).

Кроме букв и цифр, в Юникоде есть и другие символы и иконки. В последних версиях в их число вошли эмодзи , которые вы можете видеть в месседжере iOS.

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

При использовании системы кодирования UTF-8 вы можете напрямую вставлять в текст символы Юникода, но также можно добавлять их в текст, указывая цифровую символьную ссылку. Например, это символ сердечка и вы можете вывести этот символ, просто добавив код в разметку .

Эту числовую ссылку можно задавать как в десятичном формате, так и в шестнадцатеричном. Десятичный формат требует добавления в начале буквы x , запись даст то же самое сердечко ( ), что и предыдущий вариант. (2665 это шестнадцатеричный вариант 9829).

Если вы добавляете символ Юникода с помощью CSS, то вы можете использовать только шестнадцатеричные значения .

Некоторые наиболее часто используемые символы Юникода имеют более запоминаемые текстовые имена или аббревиатуры вместо цифровых кодов - это, например, амперсанд (& - &). Такие символы называются мнемоники в HTML , их полный список есть в Википедии .

Почему вам стоит использовать Юникод?

Хороший вопрос, вот несколько причин:

  1. Чтобы использовать корректные символы из разных языков.
  2. Для замены иконок.
  3. Для замены иконок, подключаемых через @font-face .
  4. Для задания CSS-классов

Корректные символы

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

Должно. К сожалению, не все браузеры и устройства поддерживают все символы Юникода одинаково (точнее, не все шрифты поддерживают полный набор символов). Например, недавно добавленные символы эмодзи поддерживаются не везде.

Для поддержки UTF-8 в HTML5 добавьте (при отсутствии доступа к настройкам сервера стоит добавить также ). При старом доктайпе используется ().

Иконки

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

Их очевидный плюс в том, что вам не надо никаких дополнительных файлов, чтобы добавить их на страницу, а, значит, ваш сайт будет быстрее. Вы также можете изменить их цвет или добавить тень с помощью CSS. А добавив переходы (css transition) вы сможете плавно менять цвет иконки при наведении на нее без каких-либо дополнительных изображений.

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

★ ★ ★ ☆ ☆

Получится следующий результат:

Но если вам не повезет, вы увидите что-то вроде этого:

Тот же рейтинг на BlackBerry 9000

Так бывает, если используемые символы отсутствуют в шрифте браузера или устройства (к счастью, эти звездочки поддерживаются отлично и старые телефоны BlackBerry являются здесь единственным исключением).

Если символ Юникода отсутствует, на его месте могут быть разные символы от пустого квадрата (□) до ромба со знаком вопроса (�).

А как найти символ Юникода, который может подойти для использования в вашем дизайне? Вы можете поискать его на сайте типа Unicodinator , просматривая имеющиеся символы, но есть и лучший вариант. - этот отличный сайт позволяет вам нарисовать искомую иконку, после чего предлагает вам список похожих символов Юникода.

Использование Юникода с @font-face иконками

Если вы используете иконки, подключаемые с внешним шрифтом через @font-face , символы Юникода можно использовать в качестве запасного варианта. Таким образом вы можете показать похожий символ Юникода на тех устройствах или в браузерах, где @font-face не поддерживается:

Слева иконки Font Awesome в Chrome, а справа замещающие их символы Юникода в Opera Mini.

Многие инструменты для подбора @font-face используют диапазон символов Юникода из области для частного использования (private use area). Проблема этого подхода в том, что если @font-face не поддерживается, пользователю передаются коды символов без какого-либо смысла.

Отлично подходит для создания наборов иконок в @font-face и позволяет выбрать в качестве основы для иконки подходящий символ Юникода.

Но будьте внимательны - некоторые браузеры и устройства не любят отдельные символы Юникода при их использовании с @font-face . Имеет смысл проверить поддержку символов Юникода с помощью Unify - это приложение поможет вам определить, насколько безопасно использование символа в наборе иконок @font-face .

Поддержка символов Юникода

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

Если ваша иконка это просто декоративный элемент рядом с текстовой меткой, читаемым скринридером, вы можете особо не волноваться. Но если иконка расположена отдельно, стоит добавить скрытую текстовую метку, чтобы помочь пользователям скринридеров. Даже если символ Юникода будет считан скринридером, есть вероятность, что он будет сильно отличен от своего предназначения. Например, ≡ (≡) в качестве иконки-гамбургера будет считан VoiceOver на iOS как “идентичный”.

Юникод в названиях CSS-классов

То, что Юникод можно использовать в названиях классов и в таблицах стилей известно с 2007 года. Именно тогда Джонатан Снук написал об использовании символов Юникода во вспомогательных классов при верстке скругленных углов . Особого распространения эта идея не получила, но о возможности использовать Юникод в названиях классов (спецсимволы или кириллицу) знать стоит.

Выбор шрифтов

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

Много иконок в Segoe UI Symbol или Arial Unicode MS . Эти шрифты есть и на PC и на Mac; в Lucida Grande также достаточное количество символов Юникода. Вы можете добавить эти шрифты в декларацию font-family , чтобы обеспечить наличие максимального количества символов Юникода для пользователей, у которых эти шрифты установлены.

Определение поддержки Юникода

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

Символы Юникода могут быть эффективны при наличии поддержки. Например, эмодзи в теме письма выделяет его на фоне остальных в почтовом ящике.

Заключение

Эта статья затрагивает лишь основы Юникода. Надеюсь, она окажется полезной и поможет вам лучше понять Юникод и эффективно применять его.

Список ссылок

  • (Генератор набора иконок @font-face на основе Юникода)
  • Shape Catcher (Инструмент для распознавания символов Юникода)
  • Unicodinator (таблица символов Юникода)
  • Unify (Проверка поддержки символов Юникода в браузерах)
  • Unitools (Коллекция инструментов для работы с Юникодом)

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

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

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

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

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

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

  • 1.1 (соответствует стандарту ISO/IEC 10646-1: 1993),
  • 2.0, 2.1 (тот же стандарт ISO/IEC 10646-1:1993 плюс дополнения: «Amendments» с 1-го по 7-е и «Technical Corrigenda» 1 и 2),
  • 3.0 (стандарт ISO/IEC 10646-1:2000).
  • 3.2 (стандарт 2002 года)
  • 4.0 (стандарт 2003)
  • 4.01 (стандарт 2004)
  • 4.1 (стандарт 2005)
  • 5.0 (стандарт 2006)
  • 5.1 (стандарт 2008)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры


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

Юникод имеет несколько форм представления (англ. 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 для обработки символов в оперативной памяти.

UTF-8

UTF-8 - это представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (на деле, только до 4 байт, поскольку использование кодов больше 2 21 не планируется), в которых первый байт всегда имеет вид 11xxxxxx , а остальные - 10xxxxxx .

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

Символы UTF-8 получаются из Unicode следующим образом:

Unicode UTF-8 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (теоретически возможны, но не включены в стандарт также:) 0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

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

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

В потоке данных UTF-16 старший байт может записываться либо перед младшим (UTF-16 B ig E ndian), либо после младшего (UTF-16 L ittle E ndian). Иногда кодировку Юникода Big Endian (UTF-16BE) называют Юникодом с обратным порядком байтов . Аналогично существует два варианта четырёхбайтной кодировки - UTF-32BE и UTF-32LE.

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

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

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