Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Русские буквы в н азвании файла
Иван Иванов wrote:
В случае с файлами нужно добиться, чтобы в файловой системе имена
хранились в кодировке, идентичной кодировке URI.
Как это сделать? В какую сторону гуглить?
Я затрудняюсь дать лаконичный ответ:
Имя файла -- это поток байт. Тот кто создает файл, тот и определяет в
какой кодировке он его создал.
У Вас файл назван, например так (koi8-r):
$'\xef\xd3\xcf\xc2\xc5\xce\xce\xcf\xd3\xd4\xc9\x2e\x64\x6f\x63'
Судя по логу у Вас кодировка консоли koi8, соответственно Вы
и файл видите как Особенности.doc
а запрашиваете Вы (utf-8):
$'\xd0\x9e\xd1\x81\xd0\xbe\xd0\xb1\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xbe\xd1\x81\xd1\x82\xd0\xb8\x2e\x64\x6f\x63'
поскольку nginx просто перекодировал URI в поток байт и пытается его
открыть.
В вашем случае надо взять то место, откуда этот файл пришел (будь то
самба, ftp, скрипт или консоль) и выяснить почему его имя не в utf-8.
Поправьте меня, но насколько я понимаю, nginx на данный момент не может
перекодировать символы в запрашиваемых URI (да и не нужно это).
Пример (utf-ая консоль):
# cd <web root>
# echo utf8 > Русский.txt
Вот как это выглядит в utf-ой консоле:
# ls *.txt
Русский.txt
Теперь в ff я набираю:
http://www.domain.ru/Русский.txt
Получаю ответ:
utf8
В логах имею:
192.168.1.13 - - [10/Jun/2008:20:56:24 +0200] 200 "GET
/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9.txt
HTTP/1.1" 5 "-" "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.14)
Gecko/20080518 Firefox/2.0.0.14
" "www.domain.ru" -
--
Regards,
Valery Kholodkov
|