Повторная загрузка файла с именем файла Unicode создает идентичный дубликат
Я использую сайт Django в системе Debian 6 с сервером gunicorn и nginx 0.7.67 для обработки статических файлов. Языковой стандарт файловой системы установлен в sv_SE.UTF-8.
У меня возникла проблема, когда другой пользователь загрузил файл с именем файла, содержащим символы Unicode. Это заставило сервер выбросить 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.
2 ответа
Они имеют разные кодировки для имени файла. Что выводится, когда вы делаете в каталоге:
$ file -i *
Визуально одна и та же строка Unicode может отличаться из-за нормализации Unicode. Вы можете проверить, если имена отличаются, пытаясь сделать ls > a.txt
и анализ файла как двоичных данных, побайтово.
PS. я надеюсь ls
не выполняет саму юникодную нормализацию и доставляет имена файлов "как есть"...