在 CentOS 上使用 SFTP 出现乱码,通常不是 SFTP 本身的问题,而是字符编码不一致导致的(客户端、服务器、终端、文件本身编码不同)。下面按常见场景给你处理方案。
常见表现:
???.txt)locale
正常应看到:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
编辑:
vi /etc/locale.conf
内容:
LANG="zh_CN.UTF-8"
重新登录或重启。
SFTP 使用 sshd,需要确保环境是 UTF-8。
vi /etc/ssh/sshd_config
确保或添加:
AcceptEnv LANG LC_*
然后:
systemctl restart sshd
Windows 默认 GBK,CentOS 是 UTF-8
➡️ 几乎必乱码
✅ 解决方案:
file filename
convmv -f gbk -t utf-8 --notest 文件名
安装:
yum install convmv
iconv -f gbk -t utf-8 old.txt > new.txt
✅ 统一使用 UTF-8
✅ 服务器、客户端、终端全部 UTF-8
✅ 文件名尽量用英文
✅ 不用 Windows 原生 SFTP 客户端
locale
echo $LANG
ssh 登录后 echo $LANG
FileZilla 是否 UTF-8
如果你愿意,可以告诉我:
我可以给你更精准的方案。