Чтобы понимать и печатать символы различных языков, система и программное обеспечение должна быть способна отличить их от других символов. То есть каждый уникальный символ должен иметь уникальное представление внутри операционной системы, или специфического пакета программ. Такая совокупность всех уникальных символов, которые система способна представить сразу, называется кодировкой.
Во время создания большинства операционных системе, никто не позаботился предусмотреть возможность представления информации в программах на других языках, отличных от английского. Поэтому, наиболее популярной кодировкой была (и фактически ей и остается) ASCII (Американский Стандартный Код для Информационного Обмена).
Стандарт ASCII (или ASCII с 7ми битами) включает в себя 128 уникальных кодов. Они подразделяются на символы, которые ASCII определяет как, собственно, печатаемые символы, и на так называемые, символы управления, которые имели специальные значения в старых протоколах связи. Каждый элемент набора идентифицирован целочисленным символьным кодом (0-127). Подмножество печатаемых символов представляют те, которые находят на клавиатуре пишущей машинки с некоторыми некоторыми добавлениями. Каждый символ занимал 7 младших значимых битов байта, тогда как старший разряд использовался для целей управления (то есть, для управления передачи в старых пакетах связи).
Концепция ASCII с 7ми битами была расширена до ASCII с 8 битами (или расширенного ASCII). В этой кодировке, диапазон символов соответствует кодам от 0 до 255. Младшие биты (0-127) - чистый ASCII, в то время как старший разряд добавляет еще 127 символов. Так как эта кодировка обратно совместима с ASCII (символ все еще занимает 8 бит, и коды полностью соответствуют старому ASCII), эта кодировка стал широко использоваться.
Стандарт ASCII с 8 битами не определяет содержание верхней половины таблицы кодировки. Поэтом МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ (ISO) взяла ответственность по определению семейства стандартов, известных как ISO 8859-X семейство. Это семейство есть совокупность 8ми битных кодировок, где младшая половина каждой кодировки (символы с кодами 0-127) соответствует ASCII, а старшая половина определяет символы для различных языков. Например, следующие кодовые страницы определены для:
8859-0
- Новый европейский стандарт (так называемый Latin 0)
8859-1
- Европа, Латинская Америка (также известный как Latin 1)
8859-2
- Восточная Европа
8859-5
- Кириллица
8859-8
- Идиш
В Latin 1, старшая половина таблицы определяет различные символы, которые - не являются частью Английского алфавита, но присутствует в различных европейских языках (немецкие umlauts, французские диакритические знаки и т.д).
Другая популярная реализация расширенного ASCII - это так называемая кодовая страница IBM (названная по имени компьютерной компании, которая создала эту кодировку для своих персональных компьютеров). Эта кодировка в старшей половине содержит псевдо - графические символы.
Программное обеспечение, которое не делает никаких предположений о символах использующих 8-ой бит ASCII данных, называется чисто 8ми битными. Некоторые более старые программы, разработанные для ASCII с 7 битами в памяти, а не для чистых 8ми бит могут работать неправильно с вашими расширенными ASCII данными. Большинство пакетов, однако, способны работать с расширенным ASCII по умолчанию, или для этого требуется простая переконфигурация. Подобные, простейшие программы, требующие какой-либо настройки в этом документе не рассматриваются. Вместо этого я сфокусировал свои усилия на более сложных пакетах.
Для информации о том как создавать свое чисто 8ми битное программное обеспечение смотрите раздел Locale зависимое программирование.
Так как в большинстве систем символы описываются 8ю битами, то нет никакого способа расширить ASCII еще больше. Способ создания новых символов в ASCII - это просто создание других расширенных ASCII реализаций. С помощью этого способа кириллица и была введена в ASCII.
Мы уже упомянули стандарт ISO 8859-5 как тот, в котором определяется кодировки для кириллицы. Но поскольку (как это часто случается со стандартами), он был разработан без принятия во внимание реальных процессов проходящих в СССР (когда это еще было), то единственное, что было действительно достигнуто с введением этот стандарт, так это только увеличение беспорядка с кодировками кириллицы. В то время как, в сообществе Internet очень популярна кодировка KOI8-R (см. ниже), ISO 8859-5 используется большими компаниями, создающими программное обеспечение с возможностью обработки кириллической информации, такое как большие базы данных, решения основанные на базе OpenVMS и т.д.
Другие стандарты для кириллицы включают, так называемую, Alt кодировку и кодовую страницу Microsoft CP1251. Вышеупомянутый Alt стандарт был разработан нашей "любимой" компанией для МС-ДОС довольно давно. Тогда еще слыхом не слыхивали про сети из IBM PC и поэтому основное усилие состояло в том, чтобы сделать этот стандарт настолько насколько это возможно совместимым с IBM стандартом. Поэтому Alt кодировка - это та самая IBM кодовая страница, где все специфические европейские символы в верхней половине были заменены на кириллицу, оставляя псевдографические символы нетронутыми. Следовательно, это не портило вид программ использующих для работы текстовые окна и также обеспечило символы кириллицы в них. Alt стандарт все еще жив и чрезвычайно популярен в среде МС-ДОС.
Microsoft CP1251 кодовая страница - это попытка Microsoft придумать новый стандарт для кодировки кириллицы в Windows. Насколько я знаю, это не совместимо с чем либо еще (и не удивительное, три Ха-Ха)
Ну и наконец: KOI-8 стандарт. В отличии от Alt и CP1251 он был разработан довольно давно для UNIX машин. Так как UNIX значит сеть, то основной идей при создания KOI-8 стандарта была идея об обеспечении перемещения кириллической информации по сети.
Еще раз вернемся в далекое прошлое. Обычно все работали только со стандартным (7ми битным) ASCII. 8ой бит каждого символа указывал на то, что он или управляющий символ, либо просто мусор. Обычно никто не слал данные чисто 8ми битными (каждый норовил оттяпать 8ой бит у символов). Разработчики KOI8 применили очень продуманный подход. Они поместили кириллические символы в верхней части расширенной ASCII таблицы, таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней часте таблицы. Это означает, что, если в тексте, написанном в KOI-8, мы убираем восьмой бит каждого символа, то мы все еще имеем "читабельный" текст, хотя он и написан английскими символами!
Не удивительно, что KOI8-R быстро стал фактически стандартом для кириллицы в Internet. Андрей А. Чернов проделал огромный объем работы, чтобы создать стандарт. Он - автор RFC 1489 ("Registration of a Cyrillic Character Set").
Существуют также и другие стандарты, которые отличны от ASCII и гораздо более хорошо адаптируемы. Наиболее известный из них это Unicode. Однако, эти стандарты пока не прижились в Unix вообще и в Linux в частности. Я не описываю их здесь.