Перекодировать текст из KOI8-R ↓
KOI8-R представляет собой однобайтовую кодировку для записи русских текстов, которая в 1990-е годы была фактическим стандартом в Unix-системах, электронной почте и первых русскоязычных сетях. Её название происходит от сокращения КОИ-8, то есть "код обмена информацией, восьмибитный", а буква R в конце означает Russian и указывает на то, что таблица рассчитана именно на русский алфавит. Хотя сегодня её почти полностью вытеснила UTF-8, без KOI8-R невозможно представить историю отечественного интернета.
Корни кодировки уходят в советскую вычислительную технику. Ещё в 1974 году был принят государственный стандарт, описывавший семибитный и восьмибитный коды обмена информацией, известные как КОИ-7 и КОИ-8. На их основе в начале 1990-х годов сложился вариант, который применялся в сети "Релком" и на машинах под управлением Unix. В 1993 году программист Андрей Чернов оформил его в виде документа RFC 1489, и с этого момента KOI8-R получила официальный статус в международных стандартах интернета.
Как и другие восьмибитные кодировки, KOI8-R вмещает 256 символов. Первая половина таблицы, от 0 до 127, полностью совпадает с ASCII, поэтому латинские буквы, цифры и знаки препинания записываются привычным образом. Во второй половине размещены символы псевдографики для рисования рамок и таблиц, несколько математических и типографских знаков, а также русские буквы: строчные занимают позиции с 192 по 223, заглавные идут следом, с 224 по 255. Буквы "ё" и "Ё" вынесены отдельно и находятся среди псевдографики.
Самая необычная черта KOI8-R заключается в порядке букв. Они расположены не по русскому алфавиту, а по созвучию с латинскими: русская "а" стоит на том же месте относительно начала своего блока, что и латинская "A", "б" соответствует "B", "ц" соответствует "C", "д" соответствует "D" и так далее. В результате последовательность выглядит непривычно и начинается с букв "ю", "а", "б", "ц", "д", "е", "ф", "г". Сделано это было намеренно и имело вполне практический смысл.
Дело в том, что многие каналы связи и почтовые программы того времени были семибитными и попросту отбрасывали старший бит каждого байта. Текст в большинстве кодировок после такой операции превращался в бессмысленный набор знаков, а текст в KOI8-R становился транслитом, пусть и с перевёрнутым регистром. Например, слово "Привет" превращалось в "pRIWET", и адресат всё ещё мог понять написанное. Для эпохи ненадёжных модемных соединений и разнородного оборудования это свойство было чрезвычайно ценным.
Расплатой за такую устойчивость стали неудобства при обработке текста. Поскольку коды букв не следуют алфавитному порядку, простая сортировка строк по числовым значениям байтов даёт неверный результат, и программам приходится использовать специальные таблицы сравнения. Кроме того, KOI8-R содержит только русский алфавит и не подходит для других языков с кириллической письменностью. Чтобы решить эту проблему, были созданы родственные кодировки: KOI8-U с дополнительными буквами украинского алфавита и KOI8-RU, охватывающая также белорусский язык.
Главным соперником KOI8-R стала Windows-1251, принятая в операционных системах Microsoft. В ней русские буквы идут строго по алфавиту, а вместо псевдографики размещены типографские знаки и буквы других славянских языков. Кроме того, в MS-DOS использовалась CP866, на компьютерах Apple применялась MacCyrillic, а международный стандарт предлагал ISO-8859-5. В 1990-е годы русскоязычным сайтам приходилось держать по нескольку версий одной страницы или перекодировать текст на лету, а на главных страницах нередко встречались ссылки для выбора кодировки.
Несовместимость таблиц порождала хорошо знакомые многим "кракозябры". Слово "Привет", набранное в KOI8-R и открытое как Windows-1251, выглядит как "рТЙЧЕФ", а в обратной ситуации получается "оПХБЕР". Характерный признак такой путаницы состоит в том, что заглавные и строчные буквы меняются местами: обычный текст оказывается набран в основном заглавными буквами со строчными в начале предложений. По этой примете опытные пользователи безошибочно определяли причину ошибки и нужное направление перекодировки.
Конец эпохе множества кириллических кодировок положил Юникод. UTF-8 позволяет хранить в одном документе символы практически всех письменностей мира и при этом сохраняет совместимость с ASCII, поэтому постепенно на неё перешли и Unix-системы, и почтовые программы, и веб-сайты. Тем не менее KOI8-R до сих пор встречается в старых почтовых архивах, документации, исходных кодах и конфигурационных файлах. Если такой текст отображается неправильно, его достаточно преобразовать в UTF-8, указав исходной кодировкой "koi8-r", и он снова станет читаемым.