[Перевод] Жизнь до Unicode
Unicode определенно усложнил обработку строк, а люди, которые используют языки исключительно с алфавитами ASCII, могут подумать, что это неоправданно. Однако я не говорю на языке ASCII и достаточно взрослый, чтобы помнить альтернативы, и альтернативы были намного хуже, чем сложность Unicode.
Для справки, я начал работать с компьютерами в начале 2000-х годов в России. Русский язык использует алфавит на основе кириллицы. И что касается языков, отличных от ASCII, все относительно просто: 33 буквы, у каждой есть варианты в верхнем и нижнем регистре, и преобразование верхнего/нижнего регистра обратимо. Так как букв всего 33, вы можете уместить их в 8-битной кодировке. Кроме того, есть еще место для псевдографики.
Загвоздка в том, что какое-то время в русском языке использовались три почти одинаково распространенных кодировки.
Одна из причин — сложная история Советского Союза и вычислительной техники — он был изолирован от остального мира, и все организации, производящие компьютерное оборудование и программное обеспечение, принадлежали государству, поэтому оно могло навязать им стандарты. После распада СССР рынок был быстро захвачен западным оборудованием и программным обеспечением потому что советскую технику уже никто не производил. Частные софтверные компании тоже сразу начали выпускать ПО для импортных ОС — сначала это был DOS.
Старые советские системы в основном использовали кодировку KOI8-R. KOI расшифровывается как «Код Обмена Информацией», 8 означает 8-битный, а R означает русский (есть еще украинская версия под названием KOI8-U, украинский алфавит отличается от русского). Эта кодировка, мягко говоря, безумна: она была спроектирована так, что удаление 8-го бита оставляет вам несколько читабельную ASCII-транслитерацию русского алфавита, поэтому русские буквы не идут в обычном порядке.
DOS использовал CP866. Это гораздо менее безумно, поддерживается порядок букв и охватывается несколько языков с кириллицей. Что случилось, когда появилась Windows? Microsoft разработала новую кодировку Windows-1251.
Добавила ли она бесшовную перекодировку старых файлов из DOS? Конечно, нет! Русская версия Windows эффективно использовала две разные кодировки: родные части Windows использовали Windows-1251, в то время как подсистема DOS по-прежнему использовала CP866. Если вы набрали свое задание по программированию в Turbo Pascal 5 и писали все комментарии на русском языке, вы не могли открыть его в notepad.exe для печати — комментарии в конечном итоге были бы нечитаемыми.
Итак, без Интернета дела обстояли плохо, но когда подключение к Интернету стало более доступным, все стало намного хуже, потому что вы даже не знали, в какой ОС изначально был создан файл.
Кроме того, Интернет работает в UNIX-подобных системах. Проприетарное оборудование UNIX (Sun, HP и т. д.) было слишком дорогим для большинства компаний, а быстрый рост Интернета в России совпал с быстрым ростом внедрения программного обеспечения с открытым исходным кодом, поэтому на практике UNIX-подобный означает FreeBSD и Linux. Это означает, что мы можем игнорировать тот факт, что проприетарные системы UNIX использовали ISO 8859–5 — этот факт не повлиял на обычного пользователя. Только варианты кодирования свободных систем и систем с открытым исходным кодом.
FreeBSD и Linux использовали… KOI8-R, советскую кодировку. Основная причина в том, что она использовалась в старых советских UNIX-подобных системах (например, DEMOS, и когда старые настройки были перенесены на новые ОС это был, вероятно, естественный выбор. К тому же KOI8-R был не от Microsoft. Linux давно поддерживает Windows-1251, но я не видел, чтобы кто-нибудь использовал его — по умолчанию был KOI8-R, и все выбирали его (включая меня, хотя я потом перешел на Unicode, как только это стало возможным).
Итак, к концу 90-х годов сложилась ситуация, когда большинство веб-серверов, серверов электронной почты или IRC работали под управлением UNIX-подобных ОС с KOI8-R, в то время как большинство рабочих станций работали под управлением Windows с Windows-1251. Из-за этого путаница с кодированием стала частью повседневной жизни большинства пользователей Интернета.
Люди писали программы для эвристического обнаружения и перекодирования кодировок, такие как «Почтовый декодер» Артемия Лебедева и «Штирлиц» Всеволода Лукьянина.
По иронии судьбы, попытка запустить Штирлиц (или любую другую программу Windows с текстом в Windows-1251) в системе, которая поставляется без поддержки Windows-1251, приводит к той самой проблеме с искаженным текстом, которую она должна была решить. Это не проблема ReactOS — у вас будет такая же проблема в Microsoft Windows, если в ней не установлена поддержка русского языка.
Говоря о Windows, при монтировании дисков с Windows в Linux были свои проблемы. Если вы использовали KOI8-R в системе Linux, вам нужно было не забыть указать параметр -o iocharset=cp1251
если вы хотели, чтобы русские имена файлов были читаемыми.
Веб-браузеры долгое время не обладали функцией определения кодировки, поэтому большинство веб-сайтов предлагали несколько версий в разных кодировках. Это, как ни странно, делало заставку полезной частью веб-сайта, а не анти-шаблоном: поскольку вы не могли рассчитывать на немедленную читаемость обычного текста в веб-браузере, вам нужно было предоставить описание веб-сайта и меню выбора кодировки в виде изображений.
Например, это сайт одной из старейших рок-групп России «Аквариум» 1996 года.
Автоматическое определение кодировки веб-сайтов было решенной проблемой, когда я начал просматривать и создавать веб-сайты, поэтому я видел только меню выбора кодировки на веб-сайтах, которые были устаревшими даже в начале 2000-х годов.
Однако у IRC эта проблема была гораздо дольше. Протокол IRC не имеет понятия о кодировании, все это байтовый поток. IRC-сеть RUSNet имела модифицированный IRCd с возможностью автоматического перекодирования и использовала разные порты для клиентов с разными кодировками.
Они очень часто упоминали эти настройки порта в инструкциях по подключению, но новички все время путали их и в конечном итоге отправляли на каналы нечитаемый текст. Опытные пользователи научились распознавать общие проблемы с кодировкой визуально, а некоторые даже могли отвечать в кодировке, удобочитаемой для несчастного новичка (хотя большинство просто отправляло им ссылку на соответствующий раздел руководства).
Очевидно, я очень рад победе Unicode, потому что ни одна из этих проблем не существует в мире Unicode.