Кодировка казахского языка на Веб-страницах Интернета.

Прочитав эту страничку, Вы узнаете:
    Итак, рекомендуемая кодировка для Веб-страниц на казахском языке это UTF-8. UTF - это не кодировка в обычном смысле этого слова, т. е. не сушествует скажем шрифтов в этой кодировке - это своего рода "надстройка" над Unicode, способ транспортировки юникода. (UTF так и расшифровывается, что-то вроде Unicode Transportation Format). Поскольку этот формат основывается на Unicode, то эта кодировка годится для оформления Веб-страниц на любом языке. Проблема может быть только в том, что в конкретных шрифтах, которые использует программа-браузер на вашем компьютере, может не оказаться полного набора символов, необходимых для демонстрации  текста на избранном языке. Естественно, используемые шрифты должны быть корректными Unicode шрифтами (не псевдо-юникодами, с неверной кодировкой казахских букв расширенной кириллицы). Ну а кодировка UTF-8 сейчас поддерживается всеми современными браузерами (если не поддерживается, то это просто не современный браузер). Сейчас некоторые казахские сайты, не надеясь, что пользователь имеет шрифты с достаточным набором символов, используют технологию EOT (Embedded Open Truetype), суть которой в том, что при открытии сайта, оттуда автоматически загружаются шрифты со всеми необходимыми символами. Это тоже выход, но не без недостатков: это работает не на всех браузерах, не всех платформах, иногда загруженные символы не согласуются по размеру с соседними буквами даже в пределах одного слова. В общем, лучше конечно, чтобы на самом пользовательском компьютере были корректные Unicode шрифты со всеми казахскими буквами. Мне кажется это не слишком завышенное требование для нормального казахстанского пользователя – хочешь работать с казахским языком – установи стандартные Unicode шрифты. Кстати, в Windows XP уже и устанавливать ничего не нужно – большинство тамошних шрифтов достаточны для казахского языка. В прочих Windows можно обновить базовые TrueType шрифты. Новые версии (начиная с #2.82) распространялись ранее Microsoft, можно и сейчас их где-нибудь найти, поискав в Интернете файлы Arial32.exe, Times32.exe и  Courie32.exe. Например, вот отсюда:
http://prdownloads.sourceforge.net/corefonts/arial32.exe?download
http://prdownloads.sourceforge.net/corefonts/times32.exe?download
http://prdownloads.sourceforge.net/corefonts/courie32.exe?download
    Это важно уяснить: не нужно устанавливать разные специальные, так называемые "казахские" шрифты, типа Kaz, KaZ, KZ ! Большинство из них нестандартны, они и породили нынешнюю путаницу в кодировках! Просто обновите вышеуказанные базовые шрифты, их свежие версии поддерживают казахский язык наряду с прочими другими языками. Обновить шрифты в Windows'95/98 несложно, проблемы возникают с обновлением шрифтов в Windows Me и Windows 2000 из-за механизма защиты системных файлов в этих Windows-ах. Как преодолеть эту защиту смотрите в хелп-файлах соответствующих KazWin-ов.
    Как было сказано выше кодировка UTF-8 основана на юникоде, но это не сама юникод кодировка. Как юникод трансформируется в UTF-8 будет объяснено ниже, но для обычного пользователя, даже создающего Веб - страницы, это знать не обязательно, достаточно созданный документ сохранить в кодировке UTF-8 и всё, почти все инструменты для создания Веб - страниц позволяют это делать не задумываясь о технических деталях.
    Для тех, кто не может без знания деталей вот они. Будучи 16-битовой кодировкой Unicode несовместим с 8-битовой (а точнее даже 7-битовой) кодировкой ASCII. Хотя и говорится, что таблица Unicode начинается с ASCII, но строго говоря это не так. На самом деле Unicode начинается с двухбайтовых кодов, старший байт которых нулевой (0x00), а младший равен коду соответствующего ASCII кода. Поскольку почти вся компьютерная техника основана на ASCII, то хотелось бы иметь кодировку совместимую с ASCII, т.е. расширяющую ASCII, но всеобъемлющую как Unicode. Такая кодировка и есть UTF-8. Это кодировка с переменным количеством кодирующих байтов. Если символ принадлежит набору ASCII (код в интервале 0x00-0x7F), то он кодируется так же как в ASCII одним байтом. Если юникод символа больше или равен 0x80, то его биты упаковываются в последовательность байтов по следующему правилу:

Интервал Unicode
(шестнадцатиричный)

Код UTF-8 (двоичный)

0x0000 – 0x007F

0xxxxxxx

0x0080 – 0x07FF

110xxxxx 10xxxxxx

0x0800 – 0xFFFF

1110xxxx 10xxxxxx 10xxxxxx

Можно заметить, что если байт начинается с нулевого бита, то это однобайтовый символ ASCII. Если байт начинается с 11…, то это стартовый байт несколькобайтовой последовательности, кодирующей символ, число головных единичек которого равно количеству байт в последовательности. Если байт начинается с 10…, то это серийный «транспортный» байт из последовательности байтов, количество которых было определено стартовым байтом. Ну а биты юникода символа упаковываются в «транспортные» биты стартового и серийных байтов, обозначенные в таблице как последовательность «xx..x».
            И для справки приведем в таблице коды UTF-8 для наборов символов, входящих в кодовую страницу Windows CP1251 и в кодовую страницу со всеми казахскими буквами, используемую KazWin и неофициально названную здесь CP1251-k.

Последнее изменение: 05.02.2003
(c)2002,2003 С.М.Киккарин
sairan@computer.org
на страницу автора