|
Кодировки UNICODE и UTF-8
Кодировка UNICODE
UNICODE это международный стандарт двухбайтовой кодировки.
Слово двухбайтовый значит, что на каждый
символ текста отводится по 2 байта, т. е. по 16 битов, и это позволяет
кодировать в общей сложности 65 536 различных символов. Так много даже и не
требуется, даже если кодировать все мыслимые китайские иероглифы.
|
Кодировка UTF-8
Кодировка UTF-8 предназначена для работы с файлами в кодировке Unicode на компьютерах
с байтовой организацией памяти. В ней каждый символ кодируется несколькими байтами,
в зависимости от того, в какую категорию от попадает.
Байты можно образно разделить на три категории:
Дрезина
Один байт, несущий всю информацию о кодируемом символе. Отличие —
старший бит равен нулю. Кодирует символы основной таблицы ASCII.
Что такое дрезина?
Вагон
Дополнительный байт. Отличие —
в двух старших битах записано 10. Расширяет информационное поле паровоза на 6 битов.
Паровоз
Первый байт в группе из k байтов. Отличие —
в старших k+1 битах записаны 1, а затем 0.
На информационное поле выделяется
6−k битов.
Наши «паравозы», в отличие от настоящих, везут полезный груз. Вроде
моторного вагона в электричке.
Основным символам — латинице, цифрам и другим важнейшим символам —
достаточно дрезины, одного байта. На две тысячи символов, следующих по важности,
(на самом деле немного меньше, так как в кодировке есть лакуны) выделяется по два
байта. В их паровозе 5 информационных битов, и в вагоне еще шесть, всего 11.
В частности, кириллица имеет коды от 0400 до 04FF, с почти всеми старославянскими
буквами: НИ ӨИГА
СѢБЕ .
Китайские иероглифы требуют больше места. Например, иероглиф
大 (большой ,
произносится: да ) имеет шестнадцатиричный номер
5927 или в двоичном виде 0101 1001 0010 0111 .
В нем занято 15 битов. Такой номер размещается в паровозе и двух вагонах
11100101 10100100
10100111 .
Эти три байта в 16-ричной системе запишутся как E5 C4 C7 ,
а в десятичной как 245, 196, 199 .
Я прямо писал номер символа.
Математический знак предшествования ≺
для файлов html (интернета) тоже можно набирать
его десятичным номером как 8826; или
в шестнадцатиричном коде как 227a; ,
а в кодировке UTF-8 он при этом запишется тремя байтами:
E2 89 BA .
|
|