> Hi!
>
> >> Как должно вести себя в данном случае CharsetByExtension ? С учетом
> >> того, что Extension может быть русский ? Нет, я правда не понимаю. А
> >> хочется сделать продукт, поведение которого, по возможности, очевидное.
> alr> IMHO самое простое -- всегда в названиях файлов и связанных местах
> alr> (CharsetByExtension) использовать основную кодировку сервера.
> "Кодировки сервера" как таковой уже не существует.
>
Это осложняет дело.
> Существуют утверждения о существовании набора кодировок (CharsetDecl) и
> описания правил преобразования между ними (CharsetRecodeTable).
> Больше - ничего. Т.е. сервер определяет кодировку клиента, кодировку документа,
> а потом применяет к потоку в обе стороны соотв. преобразование (таблички).
>
Гм. Понятно.
> Так вот. Проблема по сути в том, что кодировка документа и имени документа -
> это не одно и тоже (и они могут быть разными).
>
Запросто. Как всем хорошо известно в современном мире это скорее правило, чем
исключение: при работе с Windows95 файл содержит [как правило] текст в
кодировке windows1251, а вот его имя на диске хранится в cp866 (возмите
DiskEdit и убедитесь)...
> Поэтому придется делать директиву CharsetFilenames и делать с ней
> соответствующие преобразования. А для directory index - править mod_index,
> дабы он имя файла преобразовывал из CharsetFileNames в кодировку клиента.
>
Мдааа...
> А вопрос про CharsetByExtension был задан не просто так. По extension сервер
> может (пытаться) определять кодировку _содержимого_ документа. Должен ли он
> перед этим перекодировать само имя документа (и по какой таблице). Или он
> должен сначала определить кодировку по расширению, а потом перекодировать ?
> Но ведь и расширение при этом может изменится :).
>
> Мда. Задача. Может того, ну ее нафиг ?
>
Можно и нафиг. Хозяин -- барин. Но IMHO есть [относительно] простое решение:
имена файлов в каталоге записываются в той же кодировке, в какой хранится
содержимое файлов для "обычных" файлов (так как в Unix-мире все-таки обычно
кодировка содержимого ординарных файлов совпадает с кодировкой имен файлов).
Плюс еще нужно ввести понятие кодировки для параметров файлов httpd.conf и иже
с ним. Все. Или еще более простое решение: вообще не трогать названия файлов.
Никогда. То есть в mod_index выдавать HREF (но не имена файлов) как и раньше
в виде %xx, а при преобразовании url'я часть до первого ? не трогать... Немного
"страусиное" решение, но оно проще, чем все другие и при этом относительно
"usable" (для того, чтобы понять, как ссылаться на то или иное имя нужно
переместить файл в подкаталог без index.html, зайти в этот подкаталог через
web browser и сказать "view source")... По большому счету мне пофигу -- как
будут обрабатываться русские имена файлов, но я бы хотел иметь понимание --
как именно. Имеющееся решение, где Content-length берется от одного файла,
а сам Content -- от другого IMHO уж совсем никуда не годится.
P.S. Просто как-то постепенно всюда налаживается использование русских букв в
именах файлов (MARS_NWE с моей подачи перекодирует имена файлов из cp866 в
koi8-r и обратно; Linux 2.1.x перекодирует имена файлов на VFAT'е (из cp866 или
Unicode) в koi8-r; то же самое стоит в планах у Samba и т.д... не говоря уже
про то, что символы с кодами >128 в именах файлов нормально воспринимаются
большинством *nix'овых утилит), а _*Russian*_ Apache их не поддерживает.
Конечно ему служнее, чем им всем, но он все ж таки Russian: положение обязывает...
P.P.S. Кстати как же существующий httpd догадался -- куда и как перекодировать?
Догадался он, правда, поздновато, но ведь правильно!
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.