Перекодировать текст из ISO-8859-5 ↓
В мире технологий побеждает не тот, у кого печать посолиднее. Кодировка ISO-8859-5 служит тому отличным подтверждением. У неё было всё, о чём можно мечтать: статус международного стандарта, поддержка авторитетной организации, аккуратная и логичная структура. И всё же русскоязычные пользователи её почти не заметили. Пока стандарт существовал на бумаге, люди писали письма в KOI8-R, набирали документы в Windows-1251 и запускали программы в CP866.
На свет кодировка появилась в 1988 году как пятая часть большого семейства ISO-8859. Каждая часть этого стандарта дополняла семибитную таблицу ASCII буквами какой-либо группы языков: первая предназначалась для Западной Европы, вторая для Центральной, седьмая для греческого. Пятой досталась кириллица. Разработчики стремились охватить сразу несколько славянских языков, и в таблицу вошли буквы русского, болгарского, белорусского, сербского и македонского алфавитов.
Внутреннее устройство ISO-8859-5 можно назвать образцовым. Русские буквы идут строго по алфавиту единым блоком: сначала тридцать две заглавные, сразу за ними тридцать две строчные. Перед заглавными расположен ряд дополнительных букв для других языков, начиная с "Ё", а после строчных стоит такой же ряд в нижнем регистре. Расстояние между заглавной и строчной буквой всегда одинаково, сортировка по кодам почти совпадает с алфавитной, а таблица читается как страница из учебника. Ни KOI8-R с её перемешанным порядком, ни CP866, где алфавит разорван на две части, такой стройностью похвастаться не могли.
Почему же красивая таблица осталась невостребованной? Первая причина состоит в том, что она опоздала. К концу 1980-х годов на персональных компьютерах с MS-DOS уже прочно обосновалась альтернативная кодировка, будущая CP866. В ней были знаки псевдографики, из которых строились рамки и окна тогдашних программ, а в ISO-8859-5 их не было вовсе. Перейти на международный стандарт означало сломать внешний вид практически всего существующего программного обеспечения, и на это никто не пошёл.
Вторая причина связана с сетями. В Unix-системах и в зарождавшейся электронной почте к тому времени сложилась традиция KOI8, и у неё имелся сильный практический довод: при потере старшего бита текст оставался читаемым в виде транслита. Старые почтовые шлюзы портили письма регулярно, и это свойство ценилось выше алфавитного порядка. ISO-8859-5 ничего подобного предложить не могла: её текст после такой порчи превращался в мешанину из цифр и знаков препинания.
Третий и решающий удар нанесла Microsoft. Вместо того чтобы принять готовый стандарт, компания разработала для Windows собственную кодовую страницу 1251. В неё включили то, чего остро не хватало пятой части ISO: типографские кавычки, длинное тире, многоточие, знак авторского права, а также украинскую букву "Ґ". В ISO-8859-5 из типографских радостей нашлось место только знакам номера и параграфа, а украинский алфавит остался неполным. С распространением Windows вопрос о победителе решился сам собой.
Нельзя сказать, что ISO-8859-5 совсем нигде не применялась. Она использовалась в некоторых коммерческих версиях Unix, встречалась в системах управления базами данных и числилась в списках поддерживаемых кодировок у браузеров и почтовых программ. В 1990-е годы на русскоязычных сайтах с переключателем кодировок рядом с пунктами "KOI" и "Win" иногда можно было увидеть и пункт "ISO". Выбирали его редко, обычно по ошибке, после чего страница превращалась в бессмыслицу.
Выглядит эта бессмыслица, кстати, своеобразно. В большинстве случаев перепутанные кодировки дают на экране значки, рамки или латинские буквы с акцентами, но ISO-8859-5 и Windows-1251 сдвинуты друг относительно друга ровно на шестнадцать позиций. Поэтому русский текст остаётся русскими буквами, только совсем другими. Слово "Привет", записанное в ISO-8859-5 и прочитанное как Windows-1251, превращается в "їаШТХв". Строчные буквы из начала алфавита становятся заглавными из его конца, и получается подобие шифра с заменой, какие дети придумывают для тайной переписки.
И всё-таки у проигравшей кодировки есть наследство, которым пользуется сегодня каждый. Когда создавался Юникод, его авторы взяли за основу кириллического блока именно таблицу ISO-8859-5. Порядок символов сохранён полностью: сначала "Ё" с буквами других славянских языков, затем русский алфавит от "А" до "я", затем строчные дополнительные буквы. Чтобы получить номер кириллической буквы в Юникоде, достаточно прибавить к её коду в ISO-8859-5 одно и то же число. Выходит, что каждое русское слово, набранное в UTF-8 или UTF-16, несёт в себе отпечаток стандарта 1988 года.
Встретить настоящий файл в ISO-8859-5 сейчас удаётся нечасто: разве что в старых архивах, выгрузках из давно работающих баз данных или в письмах четвертьвековой давности. Если такой документ всё же попался и показывает странный набор кириллических букв вперемешку с редкими значками, стоит попробовать указать исходной кодировкой именно её. После преобразования в UTF-8 текст вернётся к нормальному виду.