在 1Panel(基于 Nginx/OpenResty)中开启目录列表后,若出现中文文件名乱码,核心原因是Nginx 生成的 HTML 页面未正确声明字符集,或者文件系统存储的编码与浏览器解析的编码不一致。

以下是完整的解决方案,按优先级排序:
✅ 方案一:修改 Nginx配置(最推荐)
这是最直接有效的修复方式。你需要确保 Nginx 在生成目录列表页面时,明确告诉浏览器使用 UTF-8编码。
进入配置页面:
登录 1Panel → 点击左侧「网站」→ 找到目标站点 → 点击「配置」。
切换到「配置文件」标签。
添加/修改关键参数:
在对应的 location 块中(通常是 location / 或你专门用于文件分享的 location),确保包含以下三行配置:
nginxlocation / {
# 1. 开启目录列表
autoindex on;
# 2. 【关键】设置字符集为 UTF-8,解决中文乱码
charset utf-8;
# 3. 【关键】指定哪些 MIME 类型应用上述字符集(autoindex 生成的是 text/html)
charset_types text/html;
# 可选优化:显示友好文件大小和本地时间
autoindex_exact_size off;
autoindex_localtime on; }
注意:charset_types text/html; 非常重要。如果没有这一行,charset utf-8; 可能不会应用到 Nginx 自动生成的目录索引页面上,导致浏览器默认使用 Latin-1 或其他编码解析,从而产生乱码。
保存并重载:
点击「保存」。
点击「重载」Nginx 服务使配置生效。

🔍 方案二:检查文件系统编码(根源排查)
如果配置了上述 Nginx 参数后仍然乱码,可能是文件本身在上传时编码就错了(例如从 Windows GBK 环境上传到 Linux UTF-8 环境)。
检查文件名实际编码:
通过 1Panel 的「终端」或 SSH 登录服务器,进入该目录,执行:
bashls -b
如果输出类似 \346\226\207\344\273\266.txt,说明是标准的 UTF-8 编码(正常)。
如果输出类似 \243\306\274\252.txt 或非标准序列,说明可能是 GBK 或其他编码。
转换文件名编码(如果是 GBK):
如果确认文件名是 GBK 编码,需要将其转换为 UTF-8。可以使用 convmv 工具:
bash# 安装 convmv (以 Debian/Ubuntu 为例)
apt install convmv
# 预览转换结果(不实际执行)
convmv -f gbk -t utf-8 --notest *
# 实际执行转换
convmv -f gbk -t utf-8 *
⚠️ 操作前建议备份数据,避免误操作导致文件名损坏。
🌐 方案三:浏览器端强制指定编码(临时应急)
如果无法立即修改服务器配置,可以尝试在浏览器端强制指定编码(仅对当前用户有效):
Chrome/Edge:通常自动检测,但若乱码,可尝试安装 "Set Character Encoding" 插件手动设置为 UTF-8。
Firefox:右键页面 → 「查看页面信息」→ 「编码」→ 选择「Unicode (UTF-8)」。

💡 常见误区与注意事项
不要同时设置多个 charset:
避免写 charset utf-8, gbk;,这会导致浏览器优先尝试 UTF-8,失败后再试 GBK,可能引发二次解码错误。只保留 charset utf-8;。
URL 编码问题:
浏览器地址栏中的中文会自动转为 %E4%B8%AD%E6%96%87 形式(UTF-8 Percent-Encoding)。Nginx 会先解码再匹配文件。确保你的文件系统文件名是 UTF-8,才能正确匹配。
Windows 上传文件:
如果你经常从 Windows 电脑直接拖拽文件到 1Panel 文件管理器,1Panel 通常会处理编码转换。但如果是通过 FTP/SFTP 客户端上传,请确保客户端设置为 UTF-8 文件名传输模式。
Docker 环境:
如果 1Panel 运行在 Docker 中,确保容器内的 Locale 设置为 UTF-8。通常在 Dockerfile 或环境变量中设置:
envENV.UTF-8
ENV LC_ALL=C.UTF-8
✅ 总结
绝大多数情况下,只需在 Nginx 配置的 location 块中添加以下两行即可解决:
nginxcharset utf-8;
charset_types text/html;
保存并重载 Nginx 后,刷新页面即可正常显示中文文件名。