Поддержка всех кодировок кирилицы сервером WWW

Поддержка всех кодировок кирилицы сервером WWW

 
  • Поддержка всех кодировок кирилицы сервером WWW
  • Статистика, август 96
  • Методы.
  • Как определять, какая кодировка нужна клиенту.
  • Приложения


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

    Для поддержки кирилицы мы вынуждены поддерживать дерево документов в 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.

    Статистика, август 96


    Я посчитал какие кодировки 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. Товарного продукта пока нет


    Home | UK Shop Center |Contact | Buy Domain | Directory | Web Hosting | Resell Domains


    Copyleft 2005 ruslib.us