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

## 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) чтобы новые версии работали (при этом стандартам соответствовало), а вы?

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