/usr/local/apache/htdocs/lib/public_html/book/WEBMASTER/cyrilic5cyrilic.txt Библиотека на Meta.Ua Поддержка всех кодировок кириллицы сервером WWW
<META>
Интернет
Реестр
Новости
Рефераты
Товары
Библиотека
Библиотека
Попробуй новую версию Библиотеки!
http://testlib.meta.ua/
Онлайн переводчик
поменять

Поддержка всех кодировок кирилицы сервером 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 скрипт поддержки кодировок в моей библиотеке Ў html-KOI.pl
Перекодировщик koi8 -> Apple от Александра Фабера Ў koi-mac.pl
Таблицы перекодировки из KOI8 на языке perl Ў koi8-table.txt
perl-прогамма, из которой я сделаю "proxy" перекодировщик Ў wwwserver.pl
Подпрограммки для выбора кодировке на клиенте. Perl Ў decode.pl
Перекодировщик WWW страниц по заказу Ў http://www.botik.ru/cyrconv/cyrconv.koi8.html
Перекодировщик WWW страниц с продолжением Ў http://geology.wisc.edu/~delitsin/books/dovlatov/
Заплатки для русификации Apach. Товарного продукта пока нетЎ http://starlab.ifmo.ru:8080/~sereda/apache/
Комментарии
Анонимно
Войти под своим именем


Ник:
Текст сообщения:
Введите код:  

Загрузка...
Поиск:
добавить сайт | реклама на портале | контекстная реклама | контакты Copyright © 1998-2018 <META> Все права защищены