背景
当我访问指定链接的中文名称时,会出现乱码。
Index of /abc/
../
蹇冩櫤绐佸洿.epub 24-Dec-2025 00:59 1404389
鐗涘ザ鍙箰缁忔祹瀛�.epub 24-Dec-2025 00:59 35983463
查找原因
配置目前是
location /abc {
alias /abc/666;
autoindex on;
}
问题在于 Nginx 的 autoindex 目录列表默认使用 ISO-8859-1 编码,导致中文文件名显示为乱码。
解决
加入字符集支持utf-8
# epub file
location /abc {
alias /abc/666;
autoindex on; # 使目录列表可见
charset utf-8; # 添加这一行,指定字符集为 UTF-8
}
⚠️ 重要注意事项:
确保文件名在系统中是 UTF-8 编码(不是 GBK/乱码):
检查文件名是否正常(如果显示乱码,说明系统存储的文件名是 GBK)
ls /abc/666
✅ 正常显示:牛奶可乐经济学.epub
❌ 乱码显示:鐗涘ザ鍙箰缁忔祹瀛.epub → 需要先修复文件名(见下方)
如果文件名在系统中已乱码(例如存储为 GBK):
用 GBK 编码重命名文件(假设文件名为 "牛奶可乐经济学.epub")
mv "/abc/666/鐗涘ザ鍙箰缁忔祹瀛.epub" "/abc/666/牛奶可乐经济学.epub" # 这行命令需在 GBK 环境下执行
推荐操作:在 Linux 中用 UTF-8 环境操作(如 LANG=en_US.UTF-8),避免乱码。
💡 为什么不需要 filename* 之类的编码?
- autoindex 生成的是 HTML 页面,不是文件下载链接。
- 浏览器在渲染 HTML 时,只依赖 Content-Type 的 charset,不需要额外的 filename*。
- 添加 charset utf-8; 是最简单、最通用的解决方案(兼容 Chrome/Firefox/Edge)。
查看结果
现在正常了。
Index of /abc/
../
心智突围.epub 24-Dec-2025 00:59 1404389
牛奶可乐经济学.epub 24-Dec-2025 00:59 35983463
关注我们,获取更多DevOps和安全更新资讯!
本文作者:运维技术团队:辣个男人Devin
发布日期:2025年12月24日
适用系统:Linux