Я запускаю сайт Django в системе Debian 6 с сервером Gunicorn и nginx 0.7.67, обрабатывающим статические файлы. Локаль файловой системы установлена на sv_SE.UTF-8.
У меня возникла проблема, когда другой пользователь загрузил файл с именем, содержащим символы Юникода. Это заставило сервер выдать ошибку 404 при попытке обслуживания загруженного файла. Когда я загрузил тот же файл из своей системы, сайт теперь обслуживает файл правильно. Однако он не удалил старый файл, хотя во всех отношениях они кажутся одним и тем же файлом. Ниже приведен текущий список каталогов.
-rwxr-xr-x 1 www-data www-data 1188260 25 jan 22.53 Läxa 15_geometri.pdf
-rwxr-xr-x 1 www-data www-data 1188260 27 jan 10.45 Läxa 15_geometri.pdf
Как теперь могут быть два одинаковых файла с одинаковым (кажущимся) именем? Что могло быть причиной ошибки 404, т.е. что случилось с первой загрузкой? URL такой же, как и раньше, только теперь он не выдает 404.
Визуально одна и та же строка юникода может отличаться из-за нормализации юникода. Вы можете проверить, разные ли имена, попробовав сделать ls > a.txt
и анализ файла как двоичных данных, побайтно.
PS. я надеюсь ls
не выполняет никакой нормализации юникода и доставляет имена файлов «как есть» ...
У них разные кодировки для имени файла. Каков результат, когда вы делаете в каталоге:
$ file -i *