我在 Debian 6 系统上运行 Django 网站,使用 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 错误。
答案1
它们对文件名有不同的编码。在目录中执行以下命令时输出的内容是什么:
$ file -i *
答案2
从视觉上看,由于 unicode 规范化,相同的 unicode 字符串可能会有所不同。您可以尝试逐ls > a.txt
字节分析文件作为二进制数据,以检查名称是否不同。
附言:我希望它ls
本身不执行任何 Unicode 规范化,而是“按原样”提供文件名...