Русские буквы в названии файла

Valery Kholodkov valery+nginxru at grid.net.ru
Tue Jun 10 23:56:53 MSD 2008


Иван Иванов 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





More information about the nginx-ru mailing list