Кодировка KOI8-R
KOI8-R — это восьмибитная кодовая страница, стандартная в России для кодирования символов кириллицы в компьютерных системах. Разработана в 1980-х годах на основе более ранней семибитной кодировки КОИ-7 (Код Обмена Информацией, 7-битный). KOI8-R является одной из исторических кодировок кириллицы, наряду с CP866, Windows-1251 и ISO 8859-5, и до середины 1990-х годов была доминирующей в рунете и советских вычислительных сетях.
История
Предпосылки и разработка
В 1960–1970-х годах в СССР для передачи текстовой информации по телеграфным каналам и между ЭВМ использовались семибитные коды, в частности, КОИ-7 (ГОСТ 13052-67). В КОИ-7 кириллица занимала позиции, соответствующие латинским буквам в ASCII, что позволяло передавать русский текст по каналам, поддерживающим только 7 бит, но делало его нечитаемым для латинских терминалов (например, «Привет» превращалось в «pRIVET»). С переходом на восьмибитные системы (персональные компьютеры, сети) возникла потребность в кодировке, сохраняющей совместимость с ASCII и позволяющей корректно отображать кириллицу на экранах и принтерах.
Разработка KOI8-R велась в рамках работ по созданию единой системы кодирования для советских ЭВМ и сетей. В отличие от западных кодировок (например, CP437, где кириллица размещалась в верхней половине таблицы произвольно), разработчики KOI8-R применили принцип «обратной совместимости»: русские буквы были расположены так, что при сбросе восьмого бита (преобразовании в 7-битный код) строка становилась похожей на латинский текст, написанный в соответствии с правилами транслитерации. Это позволяло, например, передавать русские сообщения через старые 7-битные каналы без потери смысла (при условии, что получатель знал о таком преобразовании).
Распространение
В конце 1980-х — начале 1990-х годов KOI8-R стала стандартом де-факто для советских и российских компьютерных сетей, в первую очередь — для сети «Релком» (одной из первых сетей, связавших СССР с интернетом). Также она активно использовалась в операционных системах семейства UNIX (включая российские дистрибутивы), в системах электронной почты (UUCP, SMTP) и в телеконференциях (Usenet, FidoNet). В FidoNet, где действовали строгие ограничения на размер сообщений, KOI8-R была основной кодировкой для русскоязычных эхоконференций.
С появлением Windows 3.1 и Windows 95 в России стала распространяться кодировка Windows-1251 (CP1251), разработанная Microsoft. Она была более удобна для пользователей, так как не требовала переключения раскладки клавиатуры для ввода русских букв (в KOI8-R для этого использовались специальные драйверы). К середине 1990-х годов Windows-1251 вытеснила KOI8-R из операционных систем и офисных приложений, но в среде UNIX, в веб-хостинге и в некоторых специализированных системах (например, в системах автоматизации проектирования) KOI8-R сохраняла популярность до конца 2000-х годов.
Современное состояние
В настоящее время KOI8-R практически не используется в новых проектах. Повсеместно применяется Unicode (UTF-8), который поддерживает все языки мира и решает проблему несовместимости кодировок. Однако исторические архивы, старые базы данных, электронные книги и сайты, созданные до 2010 года, могут содержать тексты в KOI8-R. Большинство современных текстовых редакторов, браузеров и библиотек (например, Python, iconv) поддерживают декодирование KOI8-R для чтения таких файлов.
Принцип кодирования
Структура таблицы
KOI8-R является 8-битной кодовой страницей, то есть каждый символ кодируется одним байтом (256 возможных значений). Первые 128 кодов (0x00–0x7F) полностью соответствуют стандарту ASCII (латиница, цифры, знаки препинания, управляющие символы). Вторая половина таблицы (0x80–0xFF) содержит символы кириллицы (строчные и прописные буквы русского алфавита), а также некоторые знаки псевдографики (для текстовых интерфейсов) и символы национальных валют (например, знак рубля — в некоторых вариантах).
Особенность: «обратная совместимость»
Главная особенность KOI8-R — расположение кириллических букв. Прописные русские буквы (А, Б, В...) занимают коды 0xE0–0xFF, а строчные (а, б, в...) — 0xC0–0xDF. При этом:
- Если убрать восьмой бит (обнулить старший бит, то есть выполнить побитовое И с 0x7F), то коды прописных букв (0xE0–0xFF) превращаются в коды 0x60–0x7F, которые в ASCII соответствуют строчным латинским буквам (a–z). Например, код буквы «Р» (0xE0) после сброса бита становится 0x60, что соответствует латинской «a».
- Строчные русские буквы (0xC0–0xDF) после сброса бита становятся кодами 0x40–0x5F, что в ASCII соответствует прописным латинским буквам (A–Z) и некоторым знакам.
Таким образом, текст на русском языке, записанный в KOI8-R, при преобразовании в 7-битный код (например, при передаче через старый почтовый сервер) превращается в латинский текст, который можно прочитать, зная правила транслитерации. Например, слово «Привет» (коды: 0xE0, 0xE1, 0xD8, 0xD2, 0xC5, 0xD4) после сброса бита превращается в «pRIVET» (0x60, 0x61, 0x58, 0x52, 0x45, 0x54). Это свойство позволяло использовать KOI8-R в системах, не поддерживающих 8-битные кодировки, без потери информации.
Таблица символов (основная часть)
Ниже приведена часть таблицы KOI8-R для кодов 0x80–0xFF (в шестнадцатеричной системе):
| Код (hex) | Символ | Описание |
|---|---|---|
| 0x80–0x9F | (псевдографика) | Символы для рисования рамок, линий (в основном из CP437) |
| 0xA0 | (неразрывный пробел) | |
| 0xA1–0xBF | (псевдографика, знаки) | Дополнительные символы (например, знак градуса, параграфа) |
| 0xC0 | а | Строчная русская «а» |
| 0xC1 | б | Строчная русская «б» |
| ... | ... | ... |
| 0xDF | я | Строчная русская «я» |
| 0xE0 | А | Прописная русская «А» |
| 0xE1 | Б | Прописная русская «Б» |
| ... | ... | ... |
| 0xFF | Я | Прописная русская «Я» |
Полная таблица включает все 33 буквы русского алфавита (включая «ё» и «Ё», которые в некоторых вариантах KOI8-R отсутствуют или заменяются на «е»/«Е»). В отличие от Windows-1251, в KOI8-R нет буквы «Ё» на отдельной позиции, поэтому для её отображения часто использовали символ «E» с диакритическим знаком (код 0xB7).
Сравнение с другими кодировками
KOI8-R vs Windows-1251
- Расположение букв: В Windows-1251 русские буквы расположены в порядке алфавита (А — 0xC0, Я — 0xDF), что удобно для сортировки. В KOI8-R порядок нарушен из-за принципа обратной совместимости.
- Совместимость с ASCII: Обе кодировки сохраняют ASCII в первой половине таблицы.
- Псевдографика: KOI8-R содержит полный набор символов для рисования рамок (как в CP437), что было важно для текстовых интерфейсов DOS и UNIX. Windows-1251 не имеет псевдографики (она была вынесена в отдельные шрифты).
- Буква «Ё»: В Windows-1251 «Ё» (0xA8) и «ё» (0xB8) присутствуют. В KOI8-R их нет в стандартной таблице, что создавало проблемы при вводе и отображении.
KOI8-R vs CP866
- Область применения: CP866 (альтернативная кодировка для DOS) также была популярна в России, но её таблица несовместима с ASCII в верхней половине (там размещена кириллица, а не псевдографика). KOI8-R была более распространена в UNIX и сетях.
- Псевдографика: В CP866 псевдографика занимает коды 0x80–0x9F, а кириллица — 0xA0–0xEF. В KOI8-R наоборот: кириллица в верхней части, псевдографика — в нижней.
KOI8-R vs UTF-8
- Размер: UTF-8 использует от 1 до 4 байт на символ, что делает файлы больше, но позволяет кодировать любые символы Юникода. KOI8-R использует 1 байт на символ, что экономит место, но ограничено 256 символами.
- Совместимость: UTF-8 является универсальным стандартом, поддерживаемым всеми современными системами. KOI8-R — устаревшая кодировка, несовместимая с современными веб-стандартами без явного указания кодировки.
Применение
В исторических системах
- Электронная почта и телеконференции: KOI8-R была стандартом для русскоязычных сообщений в FidoNet, Usenet и сети «Релком». Многие старые почтовые клиенты (например, BinkleyTerm, GoldED) поддерживали только KOI8-R.
- UNIX и Linux: В российских дистрибутивах Linux (например, ASPLinux, ALT Linux) KOI8-R использовалась в терминалах, текстовых редакторах (vi, emacs) и системных утилитах. До сих пор некоторые старые конфигурационные файлы могут быть в KOI8-R.
- Веб-сайты: В 1990-х годах многие русскоязычные сайты (например, «Анекдоты из России», «Библиотека Максима Мошкова») использовали KOI8-R. Сейчас они либо перекодированы в UTF-8, либо доступны только в архивах.
В современных системах
- Архивные данные: Библиотеки, музеи и архивы часто хранят тексты в KOI8-R. Для их чтения используются программы-конвертеры (например, iconv) или текстовые редакторы с поддержкой кодировок (Notepad++, VSCode).
- Эмуляция старых систем: В эмуляторах DOS (DOSBox) и UNIX (например, в терминале xterm) можно настроить кодировку KOI8-R для запуска старых программ.
- Специализированное ПО: Некоторые программы для автоматизации проектирования (САПР) и бухгалтерские системы, разработанные в 1990-х, до сих пор используют KOI8-R.
Критика и недостатки
- Отсутствие буквы «Ё»: Стандартная таблица KOI8-R не включала букву «Ё», что приводило к её замене на «Е» или использованию нестандартных расширений. Это создавало проблемы при вводе и поиске текстов.
- Неудобство сортировки: Из-за непоследовательного расположения букв (не по алфавиту) сортировка русских слов в KOI8-R требовала специальных алгоритмов, что усложняло программирование.
- Ограниченность набора символов: В KOI8-R отсутствуют символы других языков (украинского, белорусского, казахского), что делало её непригодной для многоязычных текстов.
- Несовместимость с международными стандартами: В отличие от ISO 8859-5, KOI8-R не была стандартизирована на международном уровне, что затрудняло её использование в глобальных сетях.
Интересные факты
- Название «KOI8-R» расшифровывается как «Код Обмена Информацией, 8-битный, для русского языка».
- В некоторых вариантах KOI8-R (например, KOI8-U) были добавлены буквы украинского алфавита (ґ, є, і, ї), что позволило использовать её для украинского языка.
- До появления Unicode, при передаче русских текстов по электронной почте, часто использовали «quoted-printable» или «base64» для кодирования 8-битных символов, чтобы избежать искажения на 7-битных каналах.
- В 1990-х годах существовали шрифты для KOI8-R, которые имитировали стиль пишущей машинки (например, шрифт «Courier New» с кириллицей).
Источники
- ГОСТ 13052-67 «Система кодирования информации. Код обмена информацией для передачи данных по телеграфным каналам» (7-битный КОИ-7).
- RFC 1489 «Registration of a Cyrillic Character Set» (1993) — описание KOI8-R.
- К. М. Трофимов, «Кодировки кириллицы: история и современность», журнал «Мир ПК», 1996.
- Материалы сайта «Кодировки кириллицы» (cyrillic.info) — исторические таблицы и сравнения.
- Документация по кодировкам в библиотеке GNU libc (iconv).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →