Регистрация Вход
Библиотека /
Поиск по библиотекеМоя библиотекаИскать книгу(обмен)

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

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


Опять в кармане ничерта! Национальная черта... Владимир Медведев Для поддержки кирилицы мы вынуждены поддерживать дерево документов в 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. Товарного продукта пока нет

Наша библиотека является официальным зеркалом библиотеки Максима Мошкова lib.ru

Реклама