Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Вперед Назад Содержание

8. WWW и кириллизация

В отличие от программ электронной почты и чтения новостей, нет никаких стандартов для русской кодировки на WWW. Основная причина заключается в том, что компания Microsoft предоставляет программы создания Web сайтов, которые знают о существовании только одной русской кодировки cp1251, полностью игнорируя существование других стандартов.

Настройки, описанные здесь, очень примитивны. Они позволят вам видеть страницы в KOI8-R кодировке. Если ситуация как-то изменится, я добавлю ещё информации.

8.1 lynx

Начиная с версии 2.6, вы можете выбирать соответствующее значение для дисплея -- display Character set. lynx версии 2.8 позволяет смотреть страницы в любой кодировке, а не только в KOI8-R.

Для наcтройки следует выйти в меню 'o'ptions и проверить следующие настройки:

display (C)haracter set      : KOI8-R character set
preferred document c(H)arset : koi8-r;q=1.0,windows-1251;q=0.5

Если русская (KOI8-R) страничка отображается Lynxом неверно, то это означает, что страница неверно оформлена (см. раздел Как правильно подготовить свою WWW страничку). В последних версиях Lynx это обходится следующим образом: в настройках нажмите '^A' и выберите koi8-r (в основном отображаются заглавные буквы) или windows-1251 (в основном прописные буквы). В старых версиях Lynx после этого следует нажать @ (включить raw режим).

8.2 links

Для просмотра WWW в текстовом режиме можно использовать links (опять наши братья чехи на высоте). Поддержка кириллицы уже встроена в программу -- надо только установить кодировку терминала (в меню "Настройки") и кодовую страницу документа (в меню "Вид").

8.3 Netscape Navigator

Убедитесь, что вы используете Netscape версии 4.06 и выше. Начиная с этой версии, Netscape поддерживает кириллицу гораздо лучше.

Основные настройки

Наконец-то свершилось, теперь Netscape поддерживает русские кодировки правильным образом. Вам надо только правильно настроить шрифты KOI8-R. После этого, если например требуется показать документ, который использует cp1251, Netscape автоматически перекодирует весь документ в KOI8-R и правильно отобразит его, даже если у него нет доступа к cp1251 шрифтам.

К сожалению, Netscape всегда будет перекодировать документы, использующие cp1251, в KOI8-R, даже если ему доступны также и шрифты для ISO-8859-5. Из за этой "глупости"  вы сможете увидеть нерусские кириллические буквы только если в системе инсталлированы шрифты для ISO-8859-5 и нет ни одного шрифта KOI8-R. Конечно, это решение неприемлемо, если вы используете KOI8-R. Мне неизвестно, как заставить Netscape показывать украинскую букву "г с чубом". Из стандартных кодировок она включена только в cp1251 и KOI8-U.

Для того, чтобы правильно настроить KOI8-R в вашем Netscape, сделайте следующее:

  • В меню Options/General Preferences/Fonts выберите Cyrillic (KOI-8) кодировку.
  • Выберите подходящие шрифты для этой кодировки -- например, выберите Times(Cronyx) как пропорциональный шрифт, и Courier(Cronyx) -- как fixed.
  • Сохраните настройки.

ВНИМАНИЕ: Все больше и больше появляется WWW страниц, оформление которых сильно зависит от определённых шрифтов. Это в основном касается страниц, созданных под и для MS Windows. Я настоятельно рекомендую установить сервер шрифтов с поддержкой TrueType. С помощью него некоторые странички станут выглядеть гораздо лучше. Для выяснения подробностей смотрите раздел Использование шрифтов TrueType.

Некоторые WWW странички в интернете правильно отвечают на запрос по поводу используемой при их создании кодировки. Другие требуют, чтобы вы выбрали кодировку сами. Для того, чтобы это сделать, выберите правильную опцию кодировки в меню Options/Document Encoding.

Netscape версии 4.08 правильно отображает элементы форм, использующих правильную кодировку (по крайней мере для большинства страниц, которые я видел). Более старые версии делают это неправильно. Однако, если по каким-то причинам вам надо использовать более старую версию, или правильное отображение форм по какой-либо причине не работает, то попробуйте сделать следующее:

  1. Скопируйте базу данных установок Netscape (обычно Netscape.ad) в ~/Netscape
  2. В файле, установите следующую опцию:
    *documentFonts.charset*iso8859-1:           koi8-r
    

Это вынудит все фреймы и элементы ввода использовать шрифты с кодировкой koi8-r вместо заданных по умолчанию, а следовательно, вы должны удостовериться в том, что вы уже установили такие шрифты (см. раздел Установка шрифтов для X Window).

Плохая новость об использовании этого трюка заключаются в том, что если вы загружаете документ, который должен отображаться с помощью шрифтов iso-8859-1, то вместо этого он отобразится с помощью koi8 шрифта. Иногда такие документы выглядят хуже.

Принципиально не русифицируемые вещи: у обоих нетскейпов (3 и 4) будут трудности со страницами в кодировке, не соответствующей 'meta content-type' в заголовке (традиционная проблема серверов с выбором кодировок и авторов, пользующихся решениями от MS). Не лечится ничем, кроме хака бинарников. Что ещё хуже -- если в документе явно указан шрифт, и такой шрифт, не дай Бог, у вас имеется (естественно, не русифицированный), то им все и будет нарисовано. Решений два: или не иметь в системе нерусифицированных шрифтов вовсе, или отключить в нетскейпе автоматическую загрузку изображений, при этом "заодно", как ни странно, отключится и показ шрифтов, указанных в документе. Нажав Alt-I, вы получите возможность посмотреть картинки. Надеюсь, текст к этому моменту вы уже запомнили ;).

Если вам нужно чего-то ещё: Андрей А. Чернов -- это человек, который знает больше о KOI8 в общем и в netscape в частности, чем другие люди. Посетите его превосходную KOI8 page страницу, и скачайте заплату для файла ресурсов Netscape, которая заставляет Netscape говорить по-русски так хорошо, как это только возможно.

8.4 Как правильно подготовить свою WWW страничку

Этот раздел появился благодаря (фактически полностью состоит из) статьям Андрея А. Чернова. Подробную информацию по этому вопросу можно найти на страничке А.А. Чернова KOI8-R - Russian Net Character Set.

Предисловие

Всемирное падение нравов началось с незначительной уступки пользователям. Как известно, в стандартах по HTML/HTTP чётко сказано, что каждому документу должен соответствовать такой параметр, как MIME-имя кодировки, и есть только один случай, когда его можно не указывать -- если документ составлен в кодировке ISO 8859-1. Это правило оказалось либо совершенно неизвестным, либо невыносимо сложным для неподготовленных пользователей, так что они предпочли проигнорировать его, и странички создавались просто набиванием некоторых кодов.

Далее, компании Netscape начал поступать поток претензий, что странички, набитые таким образом, не видны. Вместо того, чтобы отослать ламеров к документации, компания Netscape делает фатальный ход, минимально необходимый, чтобы все окончательно разрушить -- вводит возможность выбора кодировки для страничек, где она не указана!

Естественно, после такого уже никто не считает нужным указывать кодировку документа; раньше останавливало хотя бы то обстоятельство, что были затруднения с просмотром кривых страничек, требующие такой достаточно сложной операции, как замена шрифта ISO 8859-1 на шрифт используемой кодировки, теперь это препятствие было преодолено благодаря попустительству Netscape. Вслед за Netscape этот фатальный шаг делают и производители остальных броузеров, из соображений выживания в конкурентной борьбе. Вернуть все назад невозможно из-за тех же коммерческих соображений...

Тем самым, теперь выбор кодировки переносится с автоматического уровня на пользовательский, отсюда все эти надоедливые "Выберите вашу кодировку"  и на страничках, и в броузерах.

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

ВНИМАНИЕ! Иногда я слышу безответственные "мнения"  по поводу того, что указывать кодировку необязательно и не нужно: мол, пользователь у нас не ленивый, выберет вручную. При этом "советчики"  злостно умалчивают о том, что надёжного автоматического определения кодировки не существует и не может существовать в принципе; так что вебмастера, не проставляющие кодировку, с какой-то вероятностью ставят свои странички под удар быть неверно истолкованными разного рода системами автоматической обработки текста, например, поисковыми машинами. Это все равно как вам бы предложили согласиться быть убитым с небольшой вероятностью, скажем 3%. И зачем вам это нужно?

Русские странички не нарушая стандартов - это просто!

Здесь приведена пошаговая инструкция правильной подготовки ваших русских страничек для WWW:

  • Если у вас на страничках стоит выбор кодировок, выкиньте этот кусок HTML кода: он вам больше не понадобится -- отныне все будет происходить автоматически.
  • Если у вас странички не в кодировке KOI8-R, перекодируйте их туда каким-нибудь конвертером -- смотрите раздел Символьная перекодировка. Ничего страшного не произойдёт: если все дальнейшее вы сделаете правильно, то в таком виде их по-прежнему можно будет редактировать, скажем, в Netscape Composer без всякой заметной разницы. Мало того, в таком виде ваши странички будут одинаково хорошо видны для всех операционных систем без всяких переключателей кодировок, превратившихся в бич русского WWW.
  • Внимание! Данный пункт можно пропустить, если на вашем сервере стоит Apache или какая-либо его разновидность (то есть в 90% случаев) -- в этом случае необходимая информация может быть задана в настройках Apache. Если же вы предполагаете частые переезды с сервера на сервер с неизвестными HTTPD, следуйте указаниям пункта.
    • Проверьте самую первую строчку ваших русских HTML документов, она должна выглядеть примерно так:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
      

      Если такой строчки нет, или номер после слова HTML меньше 4.0, добавьте её в самое начало. Примечание для специалистов: атрибут LANG определён только в HTML 4.0 и выше, так что указание DTD обязательно.
    • Замените следующий за ней таг <HTML> на таг <HTML LANG=ru>, это укажет, что ваш документ на русском языке, и облегчит жизнь поисковикам.
  • Спросите вашего веб-мастера, что за штука стоит у вас в качестве веб-сервера, если он ответит:
    что Apache или Apache/RUS:

    в самом верхнем каталоге, содержащем ваши странички, создайте файл с именем .htaccess, доступный всем на чтение с такими строчками:

    1. Для версий Apache, начиная с 1.3.12:
      AddDefaultCharset koi8-r
      AddLanguage ru .html .txt
      

    2. Для версий Apache, начиная с 1.3.10:
      AddCharset koi8-r .html .txt
      AddLanguage ru .html .txt
      

    3. Для более старых версий Apache (или если версия вам неизвестна):
      AddType "text/html; charset=koi8-r" .html
      AddType "text/plain; charset=koi8-r" .txt
      AddLanguage ru .html .txt
      

    Если файл .htaccess уже есть, просто добавьте туда эти строчки.

    Записанное в .htaccess распространяется на все подкаталоги вниз по дереву.

    Подразумевается, что ваши HTML документы заканчиваются на .html; если они заканчиваются на .htm, поменяйте .html на .htm в предлагаемом образце.

    При таких настройках не обязательно (но можно) указывать язык тагом <HTML LANG=ru, как это было описано выше.

    Указание языка внутри HTML документа имеет приоритет над указанием для сервера.

    Так как для текстовых (*.txt) документов никак нельзя указать язык внутри документа, указание для сервера -- это единственная альтернатива.

    Если у вас на сервере стоит Apache/RUS, то рекомендуется отключить всякую автоматическую перекодировку, добавив в .htaccess директиву


    CharsetTurnOff On
    

    (работает начиная с версии Apache/RUS PL20).

    ПРЕДУПРЕЖДЕНИЕ: в последних версиях Apache обработка файлов .htaccess по умолчанию выключена в главной конфигурации (директивой AllowOverride None), т.е. ваши установки не будут иметь никакого эффекта. В этом случае попросите вебмастера включить такую обработку для вашего каталога, добавив директиву


    AllowOverride +FileInfo
    

    в соответствующую секцию <Directory ...> конфигурации Apache.

    что NCSA:

    в каждом каталоге, содержащем ваши странички, заведите файл с именем .htaccess, доступный всем на чтение с такими строчками:


    AddType text/html;\ charset=koi8-r .html
    AddType text/plain;\ charset=koi8-r .txt
    

    Если файл .htaccess уже есть, просто добавьте туда эти строчки.

    Подразумевается, что ваши HTML документы заканчиваются на .html; если они заканчиваются на .htm, поменяйте конец строки на .htm соответственно.

    что CERN:

    для каждого вашего каталога с русскими страничками создайте подкаталог .web, в него положите файлы с именами, сконструированными добавлением суффикса .meta к именам в главном каталоге. Каталог .web и файлы в нем должны быть доступны всем на чтение. Например, файлу index.html соответствует файл .web/index.html.meta и т.д. Каждый такой файл должен содержать следующую строчку


    Content-Type: text/html; charset=koi8-r
    

    (для HTML файлов) или


    Content-Type: text/plain; charset=koi8-r
    

    (для текстовых файлов).

    что какой-нибудь другой HTTP сервер:

    сперва попробуйте связать расширения .html и .txt по аналогии с решениями выше; если вы не знаете, как это сделать в вашем HTTP сервере, вам придётся редактировать непосредственно сами ваши странички: в секцию <HEAD> каждого HTML документа вставьте самой первой директивой следующий таг:


    <META HTTP-EQUIV="Content-Type"
    CONTENT="text/html; charset=koi8-r">
    

    Т.е. каждый ваш документ должен будет выглядеть примерно так:


    <HEAD>
    <META HTTP-EQUIV="Content-Type"
    CONTENT="text/html; charset=koi8-r">
    <TITLE>Заголовок странички</TITLE>
    </HEAD>
    <BODY>
    Содержимое странички
    </BODY>
    

    К сожалению, в этом случае невозможно указание кодировки для текстовых файлов (*.txt).

На этом все готово. При просмотре ваших страничек никто теперь не увидит мусора из умляутов вместо нормальных русских букв, и не придётся больше выбирать кодировки!

Проверка правильности кириллизации

Как проверить, удалось ли проставить кодировку и язык в HTTP заголовке?

Допустим, ваша страничка называется http://www.yourserver.ru/yourpath/yourpage.html

  • Наберите: telnet www.yourserver.ru 80
  • После соединения наберите: HEAD /yourpath/yourpage.html HTTP/1.0 (возможно, в некоторых системах придётся набирать вслепую)
  • Нажмите Enter два раза. Вы увидите HTTP заголовок.
  • Найдите в нем поле Content-Type и проверьте, что там стоит не просто text/html, а text/html; charset=koi8-r
  • Если вы на сервере установили русский язык для ваших страничек, в заголовке должно присутствовать поле
           Content-Language: ru
    

Полезные советы

А совсем старые версии броузеров не показывают русских букв при таком способе, что делать?

Посоветовать пользователю сменить версию броузера на более новую. В качестве прецедента, вспомните, что было с вводом прогрессивных JPEG, или анимированных GIF? Все поменяли версии на новые, никто не жаловался и не делал две копии страничек, одну с GIFами, а другую -- без, а потом предлагал бы их выбрать...

А нельзя сделать так, чтобы 1) старые версии работали, 2) новые версии работали, и 3) чтобы пользователю было удобно?

Нельзя. Из этой тройки можно сделать вместе только два, на выбор. Из-за ненависти к пользователю у нас часто делают (1) чтобы старые версии работали и (2) чтобы новые версии работали (при этом стандартам не соответствует), я же предпочитаю (3) чтобы пользователю было удобно и (2) чтобы новые версии работали (при этом стандартам соответствовало), а вы?


Вперед Назад Содержание