在 CentOS 上使用 SFTP 出现乱码,通常不是 SFTP 本身的问题,而是字符编码不一致导致的。下面按常见原因给你解释,并给出解决办法。
CentOS 7/8 默认使用:
LANG=en_US.UTF-8 或 zh_CN.UTF-8
但如果你的 Windows 客户端(如 FileZilla、Xshell、WinSCP) 使用的是:
就会出现中文文件名乱码。
✅ 解决:
站点管理器 → 字符集 → 强制 UTF-8高级 → 环境 → 文件名 UTF-8 → 开启检查当前编码:
locale
如果看到:
LANG=
LC_ALL=
或不是 UTF-8,就会乱码。
✅ 解决:
localectl set-locale LANG=zh_CN.UTF-8
# 或
export LANG=en_US.UTF-8
并安装中文语言包(如需要):
yum install -y glibc-langpack-zh
⚠️ 重要说明:
所以:
✅ 唯一正确方式:两端编码一致(推荐 UTF-8)
如果是:
那可能是:
✅ 解决:
如果是:
可能需要在挂载时指定编码:
mount -o iocharset=utf8 /dev/sdb1 /mnt/data
或 Samba:
[share]
path = /data
dos charset = CP936
unix charset = UTF-8
你可以依次确认:
locale 是否为 UTF-8如果你愿意,可以告诉我:
我可以给你更精确的解决方案。