ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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



 




Copyright © Lexa Software, 1996-2009.