Использование Unicode
Использование Unicode
Для описания символов сотен языков всего мира, а также других символьных обозначений (например, математических символов) Unicode позволяет использовать три формы кодирования — UTF-8, UTF-16 и UTF-32.
UTF-8
В UTF-8 символы разных диапазонов кодируются последовательностями, состоящими из разного количества байт в соответствии со следующими правилами.
? Символы с кодами в интервале #x0–#x7F кодируются одним байтом, первый бит которого равен нулю.
? Для остальных символов число байт определяется количеством ведущих единиц первого байта последовательности.
? Два первые бита каждого последующего байта равны единице и нулю соответственно.
? Все остальные биты используются для кодирования символа.
В табл. 1.2 для каждого интервала символов показано количество байт, нужных для кодирования символа, форма кодирования и количество бит, доступных для кода.
Таблица 1.2. Формы кодирования символов в UTF-8
Диапазон Кол-во байт Форма кодирования Кол-во бит #x0-#x7F 1 0xxxxxxx 7 #x80-#x7FF 2 110xxxxx 10xxxxxx 11 #x800-#xFFFF 3 1110xxxx 10xxxxxx 10xxxxxx 16 #x10000- #x1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 21К примеру, символу "Э" (заглавной русской букве "Э") Unicode присваивает код #x42D или 10000101101 в двоичном представлении. Это значение входит в интервал #x80-#x7ff, значит, для кодирования нужно использовать двух-байтовую форму вида 110xxxxx 10xxxxxx, где символы "x" обозначают 11 бит, доступных для кодировки. Таким образом, данному символу будет соответствовать следующий двоичный код:
11010000 10101101
или #xD0AD в шестнадцатеричном представлении.
Полужирным шрифтом выделены управляющие биты UTF-8 (110 означает, что символ закодирован двухбайтной последовательностью, 10 определяет второй байт последовательности), курсивом — биты кода символа.
Удобство UTF-8 заключается в том, что кодировка первых 127 символов совпадает с широко распространенной 7-битной кодировкой ASCII. Это делает возможным использование уже существующего программного обеспечения для обработки текста в UTF-8, например текстовых редакторов.
UTF-16
Для записи наиболее часто используемых символов с кодами, меньшими #xFFFF, UTF-16 использует двухбайтные последовательности, в которых каждый бит соответствует биту кода. Помимо этого, в UTF-16 могут быть также представлены символы с кодами в диапазоне #10000-#FFFFF. Для кодирования этих символов в UTF-16 применяются пары 16-битных значений в интервале #xD800-#xDFFF (ранее зарезервированные Unicode), называемые суррогатными парами (surrogate pairs). Младшие 10 бит каждого значения отводятся на кодировку символа, что в итоге дает 20 бит, достаточных для записи любого кода, не превышающего #xFFFFF (табл. 1.3).
Таблица 1.3. Формы кодирования символов в UTF-16
Диапазон Кол-во байт Форма кодирования Кол-во бит #x0-#xD7FF 2 xxxxxxxx xxxxxxxx 16 #xD800-#xDFFF Зарезервированы #xE000-#xFFFF 2 xxxxxxxx xxxxxxxx 16 #x10000-#xFFFFF 4 110110xxxxxxxxxx 110110xxxxxxxxxx 20Примеры
Символ "Э" с кодом #x42D будет записан в UTF-16 в виде последовательности из двух байт — #x042D.
Для символа с кодом #x153DC (в двоичном представлении — 10101001111011100) понадобится 4 байта. Он будет записан в виде
1101100001010100 1101101111011100
или #xD854DBDC в шестнадцатеричном исчислении.
Полужирным шрифтом выделены управляющие биты UTF-16, курсивом — биты кода символа.
UTF-32
UTF-32 является самой простой формой кодирования — для каждого символа, вне зависимости от диапазона, используются 4 байта. Такой способ, несомненно, не является самым экономичным с точки зрения объема хранимой информации, но во многих случаях предоставляет определенные преимущества при обработке текста, так как символы не нужно декодировать.