在 CentOS 上使用 SFTP 出现乱码,通常是字符编码不一致导致的(服务器 vs 客户端)。下面按常见场景给你一套“破局方案”。
SFTP 本身不转码,它只是传文件:
locale
如果不是 UTF-8,执行:
sudo localectl set-locale LANG=en_US.UTF-8
# 或中文
sudo localectl set-locale LANG=zh_CN.UTF-8
重连服务器后再看:
locale
编辑:
sudo vi /etc/ssh/sshd_config
确保有:
AcceptEnv LANG LC_*
然后重启:
sudo systemctl restart sshd
确保本地终端是 UTF-8:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
再连:
sftp user@centos_ip
convmv -f gbk -t utf-8 -r --notest /path
安装:
sudo yum install convmv
tar zcvf file.tar.gz dir/
tar 不会改文件名编码,解压端再用对应编码处理。
| 场景 | 解决 |
|---|---|
| WinSCP 乱码 | 选项中设置 UTF-8 |
| Xshell 乱码 | 终端编码改 UTF-8 |
| 中文文件名变成 ? | 服务器没开 UTF-8 |
✅ 统一标准:UTF-8
如果你愿意,可以告诉我:
cat /etc/redhat-release)我可以直接给你“对症下药”的命令。