Опять в кармане ничерта!
                              Национальная черта...
                                          Владимир Медведев

Для   поддержки   кирилицы  мы  вынуждены  поддерживать  дерево
документов в 7 различных  кодировках,  по  степени  значимости:
pure   english,   koi8,   win,   transliterated  volapuk,  alt,
iso_8859_5, macintosh adobe charset
 Проблемы  "кодировки"  english  здесь рассматриваться не будут
ввиду   необъяснимых   политических   пристрастий   автора,   и
технической сложности реализации. А об остальных - поговорим.

На  данный  момент  в  различных  WWW  клиентах  (WWW  browser)
используются следующие кодировки символов кириллицы:

KOI8-r, koi, koi8
     или    RFC1489   -  рекомендация,  которая  базируется  на
     государственном стандарте  кода  обмена  информацией  КОИ8
     (ГОСТ  19768-74).  Применяется в основном на компьютерах с
     ОС UNIX. Широко распространена в сети Relcom.

CP-1251, win, windows
     Microsoft   code  page 1251. Применяется в оконной системе
     MS-Windows.

CP-866, alt
     Microsoft/IBM    code   page   866   или  "альтернативная"
     кодировка.  Применяется   в   основном   на   персональных
     компьютерах с операционной системой MS-DOS

ISO-8859-5, iso_8859_5
     Международный стандарт. Применяется в основном на различных
     компьютерах с ОС UNIX.



Я    посчитал    какие   кодировки   viewer'ов   использовались
посетителями   моей   библиотеки.

  март апрель июнь август
  62%   65%    69%   65%  KOI
  19%   18%    19%   25%  windows
  12%   11%    10%    5%  volapuk
   3%    3%     1%    2%  alt
   2%    2%     1%    1%  iso_8859_5
   0%    0%     0%    0%  mac

Результаты было легко предсказать, не считая на удивление малый
процент "чайников"-volapuk'истов.



-1.   У   всех  клиентов   в   мире  -  MS  Windows.  И  нечего
выпендриваться, существует только одна кодировка русских  букв.

0.  Цынично и дешево: поддерживаем все 7 деревьев. Периодически
пускаем  программу,  которая  следит   и   синхронизирует   это
безобразие.

1.   Все   документы  выдаем  через  соответствующий  кодировке
cgi-скрипт - http://www.host/cgi-bin/KodEncoding/file/name.html
Скрипт    определяет   запрошенный   документ   по   переменной
$PATH_INFO, и кидает его, перекодируя на лету.

2. Насилуем сам сервер, и вшиваем перекодировки во внутрь.

3.  Сажаем  на  7  разных  портов,  вперед  настоящего,  демоны
перекодировщики  (эдакий  proxy).  Демон   считывает   request,
перебрасывает  его  HTTPD  серверу,  его  выдачу перекодирует и
швыряет в клиента.

4. И всегда помните: была, есть и будет замечательная кодировка
volapuk, по научному называемая phonetic transliterated.



Так  как  пользовательский интерфейс обычно настроен для работы
только с какой-нибудь одной кодировкой, то сервер должен:

     определить кодировку клиента;
     перекодировать запрос из кодировки клиента в свою локальную
     кодировку;
     перекодировать результат запроса (документы) из локальной
     кодировки в кодировку клиента.

0. Клиент сам должен сказать, установив нам дополнительные поля
заголовка. Что-нибудь  типа  Accept-charset,  Encoding  и  т.п.
Протокол  HTTP  1.0  передает  в заголовке запроса перечисление
допустимых  форматов  документов  (MIME  content-type)  в  поле
"Accept:".  Клиент  может подставить в него виртуальный формат,
соответствующий   своей   кодировке.   Значение   этого    поля
устанавливается для CGI-скрипта в переменной HTTP_ACCEPT.

Можно использовать виртуальные форматы:

 text/x-cyrillic-iso-8859-5
 text/x-cyrillic-iso
 text/x-cyrillic-iso8859-5       - ISO-8859-5

 text/x-cyrillic-koi
 text/x-cyrillic-koi8            - KOI8-r

 text/x-cyrillic-win
 text/x-cyrillic-cp1251          - CP1251 в Windows

 text/x-cyrillic-alt
 text/x-cyrillic-cp866           - CP866

В новых версиях Mosaic и в Linx 2.3 значение поля "Accept: "
Задается в файле .mailcap -  таким образом:

        text/x-cyrillic-koi8; more %s

Только  вот  99%  клиентов  делать  этого  не умеют (и в первую
очередь имеются ввиду клиенты топчущие кнопки).


1.  По  переменной HTTP_USER_AGENT: *X11* - значит koi, *Win* -
значит win, и т.д. Уже лучше, но  насильно  мил  не  будешь,  и
пострадают   от   этого  в  первую  очередь  продвинутые  юзеры
(например виндюкист не  поленившийся  выставить  себе  фонты  и
кейборд под кои8)

2. Стартовый каталог запрашиваемого документа: /win, /koi, /lat

3.  Номер порта, на который приходит соединение: 80 - koi, 81 -
win, и т.д.

4. Имя сервера, которое использует клиент для захода к нам:
http://www-koi8.*, http://www-win.*, ...

 Утверждение: Один и тот же документ в разных кодировках ОБЯЗАН
ИМЕТЬ РАЗНЫЕ URL.
 Вопрос:  Почему  НЕЛЬЗЯ  пользоваться  неявной  перекодировкой
(т.е.  в зависимости от типа клиента давать один и тот-же URL в
разных кодировках)?
 Ответ: 1. Потому что все нормальные WWW клиенты работают из-за
прокси-сервера -  и  после  того  как  один  виндюкист  получит
документ,  все  остальные  юзеры  кои8'осьмисты  будут получать
откэшированную копию НЕ В СВОЕЙ кодировке. 2. Потому что  робот
Альтависты   проиндексирует   этот   документ  только  в  одной
кодировке, а в остальных - его никто не найдет.



  CGI-perl скрипт поддержки кодировок в моей библиотеке
  Перекодировщик koi8 -> Apple  от Александра Фабера
  Таблицы перекодировки из KOI8 на языке perl
  perl-прогамма, из которой я сделаю "proxy" перекодировщик
  Подпрограммки для выбора кодировке на клиенте. Perl
  Перекодировщик WWW страниц по заказу
  Перекодировщик WWW страниц с продолжением
  Заплатки для русификации Apach. Товарного продукта пока нет

Популярность: 1, Last-modified: Sat, 01 Feb 1997 06:22:39 GmT