Рис. 13.5. Подстановка шрифтов в файле Win.ini.
Смысл находящихся в системном реестре и в файле win.ini выражений — указание программам на то, где в шрифте искать символы, соответствующие нужной кодовой странице. Так, для шрифта Times New Roman эти символы (кириллица) начинаются с 204-го места, что и указано в Win.ini. Теперь Microsoft Word 6.0 спокойно будет работать с Unicode — шрифтом Times New Roman, воспринимая его как обычный кириллический шрифт. При этом в восприятии этого текстового редактора шрифт Times New Roman окажется как бы "разложенным" на набор шрифтов (Times New Roman Cyr, Times New Roman СЕ и др.), каждый из которых будет соответствовать определенной кодовой странице, несмотря на то, что все эти "шрифты" хранятся в одном файле.
Иногда встречается ситуация, когда Microsoft Word 97 вполне нормально отображает на экране текст, но на принтер выводится набор квадратиков. Это вот как раз проявляется некорректное взаимодействие программного обеспечения, когда одни компоненты (Word97) поддерживают новый стандарт, а другие (драйвера к принтеру) — нет[29].
Существуют русские шрифты, полностью совместимые с стандартом Unicode, которые без проблем отображаются и печатаются как в старых, так и в новых программах. Они содержат только стандартный набор символов, соответствующий русской кодовой странице и отличаются еще красивым их дизайном. В выпадающем меню выбора шрифта они обычно имеют префикс "а " (рис. 13.6).
Рис. 13.6. Шрифты Unicode — работают везде.
Koi-8
В то время как на рынке операционных систем для персональных компьютеров безоговорочную победу одержала всем нам знакомая MS-DOS, среди операционных систем для сетей дело обстояло не так. Там начинала властвовать Unix — операционная система, построенная на несколько других принципах. Эта система имела открытый исходный код — любой программист мог создать "свою" Unix, настроенную именно на его предпочтения, была очень удобна для программирования. И эта операционная система весьма бурно развивалась в своей отрасли — объединении компьютеров в единое целое. Понятие о кодовой странице в Unix имело несколько другое значение, но на этом сейчас останавливаться не стоит.
С развитием сетевых технологий возникла тенденция к объединению не только компьютеров, расположенных в одном месте, в локальные сети, но и самих этих сетей в некое единое целое. Начала зарождаться Всемирная Сеть — Internet. И одной из первых возможностей объединенной сети стала возможность обмена информацией посредством текстовых сообщений — электронная почта, e-mail.
Для работы с электронной почтой, ее передачи и приема, сортировки и разработки маршрута движения были созданы специальные системы — почтовые сервера. Сам по себе "почтовый сервер" — это программа, постоянно работающая на компьютере и выполняющая задачи по обработке почты, поступающей на компьютер, на котором она запушена, из Сети и отправляющая почту в Сеть. (Однако нередко для работы такой программы выделялся отдельный компьютер.) Чаще всего они работали под управлением операционной системы Unix.
Всемирная Сеть изначально зародилась и начала развиваться в Америке. Поэтому вся система почтовых серверов вначале была предназначена для работы с почтой англоязычных пользователей, пишущих также англоязычным адресатам. Так как использование в текстовых сообщениях, которые составляли тогда единственное содержимое электронной почты, символов псевдографики было отнюдь не обязательно (хватит и простого текста!), то программы, работающие с электронной почтой, как на компьютерах пользователей, так и на почтовых серверах, делались в расчете на первую половину кодовой страницы — на семибитную кодировку.
Ясно, что текстовые сообщения, содержащие символы с кодами, большими 127 и не могущие быть закодированы семью битами, нормально такими серверами обрабатываться не могли. Для того, чтобы такие письма все же как-нибудь проходили через семибитные почтовые серверы, символы сообщений принудительно приводились к семибитному виду — у них обнулялся первый бит, указывающий на половину их кодовой страницы. Например, символ "е" (русская буква е) переходил в "f", символ "ш" — в "у". Дальше шло уже обработанное таким образом письмо.
Если бы все почтовые сервера тогда были восьмибитные (то есть умеющие корректно работать с символами второй половины кодовой страницы), то пересылка через них русскоязычной почты не составляла бы проблем — лишь бы компьютеры отправителя и получателя поддерживали бы русскую кодовую страницу (или, в случае операционной системы Windows, и отправитель, и получатель имели бы шрифт с русскими символами). Ну и пусть в пути письмо не могло быть никем прочитано, у кого нет русской кодовой страницы (оно отобразилось бы на их компьютерах как мешанина символов) — даже лучше! Но обрезающие письма сервера не позволяли так делать.
Выходы были. Первый, самый тогда распространенный — писать письмо транслитом, latinskimi bukvami. Некрасиво и плохо читаемо, зато надежно — дойдет в исходном виде всегда. Но, поскольку все же не все почтовые сервера были семибитные, была создана специальная кодировка для электронной почты, которая отличалась тем, что на места, соответствующие кодам символов, большим 127, были поставлены русские символы, похожие по звучанию на английские буквы на местах, соответствующих кодам символов, меньших на 128. Иными словами, в этой новой кодировке коды 225, 226, 227, 228 соответствовали символам "а", "б", "ц", "д", которые при семибитном преобразовании перешли бы в коды 97, 98, 99, 100, соответствующие английским буквам "а", "Ь", "с", "d". Слово "привет", написанное в новой кодировке, пройдя через семибитный почтовый сервер, перешло бы в слово "PRIWET", что еще хоть как-то читаемо. Ну, а если письму бы повезло и на его пути не встретились бы семибитные сервера, то оно дошло бы в исходном виде.
Новая кодировка была названа KOI-8. Так как системы на основе Unix были в основном рассчитаны на работу с электронной почтой и международными сетями, то она стала стандартом для этой системы. Количество семибитных серверов стало понемногу сокращаться, сейчас их уже почти совсем не осталось в мире, а кодировка уже стала общепринятой, и программы для Unix предназначены для работы именно с ней.
KOI-8 использовалась не только Unix-системами. Так, любой пользователь персонального компьютера под управлением MS-DOS или Windows, имеющий выход к электронной почте, должен был иметь у себя программу для получения и отправки сообщений, умеющую работать с KOI-8. Выход к системе электронной почты был возможен и с компьютеров фирмы Apple — с Макинтошей, однако в операционных системах для этих компьютеров использовалась своя, оригинальная русская кодировка символов, отличающаяся от всех остальных. Для того, чтобы облегчить переписку между пользователями разных типов компьютеров и операционных систем, KOI-8 была принята как универсальная кодировка, и любая почтовая программа была обязана уметь читать и отправлять сообщения в этой кодировке.
Слишком умные серверы
Наличие пяти различных кодировок для русского языка создало определенные проблемы. Прежде всего, возникла необходимость в специальных программах-перекодировщиках, о которых речь пойдет ниже. Но самая большая проблема оказалась в российских почтовых серверах.