Уникод представляет собой систему кодирования символов, которая используется компьютерами для хранения и обмена текстовыми данными. В Уникод имеется уникальный номер (unique number) (или кодовый знак) (code point) для каждого символа основных мировых систем письменности. В эту систему также включены технические символы, знаки пунктуации и многие другие символы, используемые в письменности.
Помимо того, что Уникод является таблицей кодов символов (character map), он также включает в себя алгоритмы для сопоставления и кодирования двусторонней письменности, например, арабской, а также спецификации для нормализации текстовых форм.
В данном разделе приводится общее описание Уникода. Для получения более полной информации и списка поддерживаемых языков, символы которых могут быть закодированы с помощью Unicode, см.Веб-сайт Unicode Consortium.
Кодовые знаки (Code points)
Символы представляют собой единицы информации, которые приблизительно соответствуют единице текста в письменной форме естественного языка. Уникод определяет то, каким образом символы будут интерпретироваться, а не отображаться.
Образ символа (глиф), который отображается, или визуальное представление символа, является знаком, который выводится на экране монитора или распечатанной странице. В некоторых системах записи один символ может соответствовать нескольким глифам, или несколько символов может соответствовать одному глифу. Например, «ll» в испанском языке является одним глифом, но двумя символами: «l» и «l».
В Уникод символы преобразуются в кодовые знаки (code point). Кодовые знаки представляют собой числа, которые назначаются Unicode Consortium для каждого символа в каждой системе записи. Кодовые знаки представляются в виде записи «U+» и четырех чисел и/или букв. Ниже приводятся примеры кодовых знаков (code points) для четырех разных символов: строчная l, строчная u с умляутом, бета и строчной e с акутом.
l = U+006C
u = U+00FC
= U+0392
e = U+00E9
Уникод содержит 1,114,112 кодовых значений (code points); на настоящий момент времени, для них назначено более 96,000 символов.
Уровни (Planes)
Кодовое пространство Уникода для символов разделено на 17 уровней (plane), каждый из которых содержит 65,536 кодовых знаков.
Первым уровнем (plane) —plane 0— является Basic Multilingual Plane (BMP). Большая часть наиболее используемых символов кодируются с помощью BMP, и на сегодняшний день это уровень, на котором закодировано больше всего символов. BMP содержит кодовые знаки (code points) для почти всех символов современных языков и многих специальных символов. В BMP существует порядка 6,300 неиспользуемых кодовых знаков (code points).Они будут использованы для добавления большего числа символов в будущем.
Следующим уровнем (plane) —plane 1— является Supplementary Multilingual Plane (SMP). SMP используется для кодирования древних символов, а также музыкальных и математических символов.
Кодирование символов
Кодирование символов определяет каждый символ, его кодовый знак (code point) и то, как кодовый знак (code point) будет представлен в битах. Не зная, какое кодирование использовалось, вы не сможете интерпретировать строку символов корректно.
Существует очень большое количество схем кодирования, но конвертировать их данные между ними очень трудно, причем немногие из них могут учесть наличие символов более двух-трех разных языков. Например, если ваш ПК по умолчанию настроен на использование OEM-Latin II и вы просматриваете Веб-сайт, который использует IBM EBCDIC-Cyrillic, то все символы, которые будут представлены в Cyrillic, который не будет закодирован в схеме Latin II, не будут отображаться корректно.Такие символы будут замещены другими символами, например, знаками вопроса и квадратами.
Поскольку Уникод содержит кодовые знаки (code points) для большинства символов во всех современных языках, то использование кодировки символов Уникод позволит вашему компьютеру интерпретировать практически каждый известный символ.
Существует три основных схемы Юникод для кодирования символов: UTF-8, UTF-16 и UTF-32. UTF означает Unicode Transformation Format. Числа, которые идут за UTF, означают размер единиц (в байтах), используемых для кодирования.
- UTF-8 использует 8-битовую кодовую единицу переменной ширины. UTF-8 использует от 1 до 6 байт для кодирования символа; она может использовать меньше, столько же или больше байт, чем UTF-16 для кодирования одного и того же символа. В windows-1251, каждый код от 0 до 127 (U+0000 to U+0127) хранится в одном байте. Только кодовые знаки от 128 (U+0128) и выше хранятся с использованием от 2 до 6 байт.
- UTF-16 использует одну 16-битовую кодовую единицу фиксированной ширины. Он сравнительно компактен и все наиболее часто используемые символы могут быть закодированы с помощью одной 16-битовой кодовой единицы (code unit). Другие символы могут быть доступны при использовании пар 16-битовых кодовых единиц (code units).
- UTF-32 требуется 4 байта для кодирования любого символа. В большинстве случаев документ, закодированный с помощью UTF-32, будет примерно в два раза больше, чем такой же документ, закодированный с помощью UTF-16. Каждый символ в нем кодируется с помощью одной 32-битовой единицы кодирования фиксированной ширины. Вы можете использовать UTF-32, если вы не ограничены в дисковом пространстве и хотите использовать одну кодовую единицу (code unit) для каждого символа.
Все три формы кодирования могут кодировать одни и те же символы и могут быть переведены из одной в другую без потери данных.
Существуют и другие кодировки: например, UTF-7 и UTF-EBCDIC. Существует также кодировка GB18030, которая является китайским эквивалентом кодировки UTF-8 и поддерживает упрощенные и традиционные китайские символы. Для русского языка удобно пользоваться windows-1251.