Еще немного о русификации WWW-страниц

При путешествиях в киберпространстве самой частой проблемой, которая попадает на глаза, являются "пляшущие человечки". Это в приключениях Шерлока Холмса их приятно читать, пользуясь подсказками великого детектива. В обычной жизни такие задачки ничего, кроме раздражения, не вызывают. Что же это за зверь и с чем его едят?

Так уж получилось, что и компьютеры, и наука, их породившая, и, соответственно, языки общения с вычислительной техникой возникли и развились не у нас. Создатели программного обеспечения для работы в WWW первоначально не были слишком озабочены нуждами людей, желающих публиковать и читать информацию на своих родных языках, не использующих латинский алфавит, в том числе и на русском языке. Собственно, кроме как для собственного применения, они вообще ни на что не рассчитывали. Просто волна бурного развития компьютеров и областей их применения как-то сама собой перехлестнула через национальные границы и пошла гулять по свету. Однако и разработчики отраслевых стандартов, и изготовители оборудования, и писатели коммерческих программ остались, где жили, в англо-говорящем мире. Таким образом, сами понимаете, применяемые символы, кроме как из собственного алфавита, ниоткуда больше-то и взяться не могли. Однако далеко не все на этой планете англичане. Правда. с возникшей проблемой централизовано бороться никто не пробовал. Все существующие способы поддержки национальных символов носили любительский характер и широкого распространения не получили в силу отсутствия универсальности и наличия большого количество особых условий и специальных оговорок.

В последнее время ситуация начинает заметно изменяться к лучшему. Далеко не последнюю роль в происходящих изменениях играет Интернет. Невероятное количество пользователей со всех концов света бродят по сети по самым разным надобностям, и это уже нельзя игнорировать. Однако все же просмотр и публикация документов на русском языке сопряжена с некоторыми трудностями. Вот давайте и разберемся вместе, почему эти трудности возникают и как с ними справиться.

Коды и символы Файл, содержащий гипертекстовый WWW-документ, представляет собой обычный текстовый документ. "Внутри" компьютера современной архитектуры и при передаче по сетям каждый символ текста представляется в виде целого числа, которое в свою очередь кодируется комбинацией из восьми двоичных разрядов, называемых битами (bit). Такая комбинация из восьми бит, обрабатываемых ЭВМ как одно целое, получила название байт (byte). Каждый бит в байте может иметь ровно два состояния: "включен" и "выключен", или "1" и "0".

Легко убедиться, что существует ровно 256 комбинаций из восьми бит, каждый из которых может быть занят либо нулем, либо единицей. Таким образом, получается, что восемью битами (то есть одним байтом) могут быть представлены числа, или коды, от 0 до 255 (то есть от 00000000 до 11111111 в двоичной системе счисления). Каждому коду можно поставить в соответствие определенный текстовый символ, (например, букву или цифру) либо управляющий символ, такой как возврат каретки, переход на новую строку и т. п. Чтобы текст выглядел одинаково на мониторах разных компьютеров, необходим определенный стандарт на соответствие кодов и представляемых ими символов для текстовой информации. Такой стандарт, принятый в настоящее время на подавляющем большинстве компьютерных систем, получил название American Standard Code for Information Interchange (ASCII произносится как "аски"). Этот стандарт охватывает лишь коды от 0 до 127. В кодовой таблице ASCII не нашлось места для многих часто используемых специальных символов. Также из буквенных символов там присутствуют только символы английского алфавита. Чтобы закодировать буквы национальных алфавитов, в том числе русского, сохранив при этом совместимость с таблицей ASCII, необходимо использовать коды в диапазоне от 128 до 255. Вот тут-то и начинаются сложности.

Кодовые таблицы для кодировки букв русского алфавита (кириллицы) Существует довольно много различных кодовых таблиц, совпадающих в диапазоне кодов от 0 до 127 со стандартом ASCII и использующих диапазон кодов от 128 до 255 для специальных символов и букв русского алфавита. Среди них наиболее распространены следующие четыре.

1. Microsoft Windows Cyrilliccode page 1251 Известна также как CP-1251, или Windows-1251. Наиболее широко применяется в "русифицированных" системах Microsoft Windows 3.1, 95 и NT.

2. KOI8-r Базируется на государственном стандарте Кода Обмена Информацией КОИ8 (ГОСТ 19768-74). Применяется в основном на компьютерах с операционной системой UNIX. Принята за стандарт кодирования русскоязычных текстов при обмене по электронной почте.

Большинство WWW-серверов хранят русскоязычные документы в этой кодировке. В настоящее время имеются наборы шрифтов для Microsoft Windows в кодировке KOI8-r. Они были разработаны специально для сетевых программ, работающих под Windows.

3. CP-866 Microsoft/IBM code page 866 Известна также как "альтернативная кодировка ГОСТа" (в некоторых документах ее обозначают Alt-GOST или alt). Применяется в основном на персональных компьютерах IBM PC с операционной системой MS-DOS при работе в текстовом режиме. Программы просмотра под DOS практически не используются (обычно на IBM-совместимых машинах они работают под Microsoft Windows). Однако упоминаем эту кодировку, поскольку текст WWW-документа можно создавать в текстовом редакторе, работающем под DOS.

4. ISO-8859-5 Расположение русских букв в ней практически совпадает с так называемой основной кодировкой ГОСТа (иногда можно встретить ее обозначение как Main-GOST). Применяется редко, хотя и является международным стандартом кодировки русского алфавита, зарегистрированным International Standards Organization (ISO).

Несколько особняком от вышеперечисленных кодировок стоит кодировка Unicode, которая по замыслу ее разработчиков, входящих в так называемый консорциум Unicode (The Unicode Consortium), должна раз и навсегда решить проблему хранения в текстовых файлах символов любой из существующих на Земле систем письменности. К сожалению, пока еще Unicode используется весьма редко.

При переносе файлов с текстами на русском языке с одного компьютера на другой или даже из одной программы в другую довольно часто возникает необходимость перекодировки таких файлов. В частности, несколько забегая вперед, приведем такой пример: вы разрабатываете русскоязычный WWW-документ в текстовом редакторе, работающем под Microsoft Windows и использующем кодировку кириллицы Windows-1251, а на WWW-сервере по требованию администратора этот документ должен быть установлен в кодировке KOI8-r. Следовательно, перед переносом документа на сервер его надо перекодировать из Windows-1251 в KOI8-r. Для перекодировки текстовых файлов используют специальные программы.

Но что делать, если с администратором сервера уже договорились, собственную страницу опубликовали, а гости часто ругаются на "пляшущих человечков"? Тут можно воспользоваться одной хитростью, заложенной разработчиками в спецификацию языка HTML.

Некоторые программы просмотра автоматически подстраиваются под кодировку HTML-документа, если ее идентификатор указан в поле charset в заголовке ответа WWW-сервера на запрос по протоколу HTTP. К сожалению, идентификаторы для двух наиболее распространенных в WWW русских кодировок - KOI8-r и Microsoft Windows Cyrillic 1251 - не зарегистрированы International Standards Organization (ISO).

Тем не менее две наиболее популярные программы просмотра - Netscape Navigator и Microsoft Internet Explorer - правильно распознают KOI8-r и windows-1251 в качестве таких идентификаторов, и поэтому их можно считать стандартами de facto.

Однако большинство серверов не добавляют поле charset в заголовок ответа на HTTP-запрос. В результате даже при правильно установленных в программе просмотра русских шрифтах читатель может увидеть вместо вашего русского текста странный набор символов, и тогда ему придется переключать кодировку "вручную" (напоминаю, что в Netscape 3.0 для переключения кодировки используется меню Options / Document / Encoding).

Если сервер, на котором вы собираетесь разместить ваш документ, не настроен на автоматическое добавление информации об используемой кодировке, то укажите идентификатор кодировки в поле charset внутри HTML-файла. Для этого между флагами <HEAD> и </HEAD> поместите специальный флаг <META ...>, как показано ниже: <HTML><HEAD><TITLE> Название документа (лучше - на английском языке) </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=имя_кодировки"> </HEAD><BODY> ...содержение документа...

</BODY></HTML> Имя_кодировки замените на KOI8-r или на Windows 1251, если ваш русский текст закодирован соответственно в KOI8-r или Microsoft Windows Cyrillic 1251. Тем самым вы избавите значительную часть ваших читателей от излишних хлопот с переключением кодировок. Если в вашем документе содержатся только символы таблицы ASCII, то поле charset можно либо опустить вообще, либо указать в нем имя кодировки iso-8859-1.

Обратите внимание - когда вы конвертируете написанный вами документ из одной кодовой таблицы в другую, то имя кодировки в поле charset надо исправлять вручную при помощи какого-либо текстового редактора. К сожалению, описанный выше прием не сработает, если ваш сервер перекодирует документ из одной кодировки в другую "на лету".

"На лету" означает, что программное обеспечение сервера в принудительном порядке производит перекодировку, исходя из собственных представлений (или взглядов его администратора), из любого вида, в каком бы ни присылали свои страницы разработчики, в общий для всех, жестко установленный, стандарт. Честно говоря, сторонников такого подхода можно понять.

Взять, к примеру, почтовые серверы. Чего только через них не посылают. Разве что валенки еще не пробовали. В теории так замечательно все выглядит. В каком бы виде не поступала почта, сервер переводит ее в единый стандарт. Неважно, какой, главное - общий для всех, невзирая на лица. Хитрость заключается в том, что если пристрастия отправителей сообщений предсказать нельзя, то в чем работает владелец почтового ящика - очень даже запросто! Администратор сам же и раздает эти ящики. Таким образом, не составляет труда определить каждому своему абоненту, какой кодировкой пользоваться. В итого общая схема работы почтового сервера становится простой и изящной. Получить письмо. Привести к общему знаменателю. По запросу из общего вида представить в кодировке, согласно заранее внесенной (при регистрации) учетной записи.

К сожалению, даже при обработке почтовой корреспонденции не все проходит гладко, что уж тут говорить о Всемирной Паутине. Когда программа просмотра обращается к конкретной странице, то ничегошеньки о себе не сообщает. Просто, кричит что есть сил: Эй! На сервере! Данные давай! Адрес такой-то. Если по указанному адресу что-то присутствует, то он исправно отвечает: Добро! Лови! И приступает к передаче байтов. Получив мешанину нулей и единиц, программа просмотра уже сама пытается найти в них какой-нибудь смысл.

В общем, как победить такие "умные" сервера, я пока не придумал. Правда, есть один способ. Необходимо создать в настройках своего браузера несколько вариантов кодировки, соответствующих разным кодовым таблицам. Если в режиме "по умолчанию" прочесть русский текст не представляется возможным, то можно вручную переключиться на другую кодировку. И так до тех пор, пока текст не станет читаемым. Однако в качестве постоянного такое решение подходит с большим трудом. Во-первых, это, мягко говоря, не совсем удобно. А во-вторых, - тоже не всегда успешно срабатывает. Хотя это все же лучше чем ничего.

Что касается собственной страницы, то рано или поздно, но придется вам создать несколько ее вариантов по количеству кодировок. Тут уж предстоит воспользоваться несколькими редакторами, работающими в соответствующих кодовых таблицах, либо программами перекодировки, о которых я говорил ранее. После окончания работ на титульную страницу следует поместить несколько ссылок, каждая из которых будет содержать одинаковый текст, но в собственной кодировке. Обычно пишут: "Ваша кодировка" (или напрямую указывают "Кодировка такая-то") и настраивают дальнейший переход на последовательность страниц именно в этой системе кодирования символов. Любой гость, заглянувший на вашу страницу, без долгих объяснений поймет, куда ему двигаться дальше. Подобное решение, конечно, является делом вкуса, если вашу страницу посещают по пять человек в год (и их скорее всего все устраивает). Однако если посещений стало много или вы всерьез стали задумываться над перспективой зарабатывания денег с ее помощью, то решить задачу кодировок придется обязательно. Иначе сохранение проблемы читабельности практически наверняка станет серьезным препятствием для увеличения посещаемости.

Александр Запольскис


Компьютерная газета. Статья была опубликована в номере 39 за 1997 год в рубрике интернет :: вебмастеру

©1997-2024 Компьютерная газета