温馨提示×

centos sftp乱码怎么破

小樊
51
2026-10-08 21:17:55
栏目: 智能运维

在 CentOS 上使用 SFTP 出现乱码,通常是字符编码不一致导致的(服务器 vs 客户端)。下面按常见场景给你一套“破局方案”。


一、先确认问题本质

SFTP 本身不转码,它只是传文件:

  • 文件名乱码 → 服务器/客户端编码不同(常见 UTF-8 vs GBK)
  • 文件内容乱码 → 文件本身就是非 UTF-8 编码
  • 终端显示乱码 → 终端编码不对

二、服务器端(CentOS)设置(最重要)

1️⃣ 设置系统语言为 UTF-8

locale

如果不是 UTF-8,执行:

sudo localectl set-locale LANG=en_US.UTF-8
# 或中文
sudo localectl set-locale LANG=zh_CN.UTF-8

重连服务器后再看:

locale

2️⃣ SSH / SFTP 服务端配置

编辑:

sudo vi /etc/ssh/sshd_config

确保有:

AcceptEnv LANG LC_*

然后重启:

sudo systemctl restart sshd

三、客户端侧(你连 CentOS 的那台)

✅ 使用 FileZilla(推荐)

  • 站点管理 → 高级
  • 字符集:强制 UTF-8
  • 或尝试 GB2312 / GBK(连 Windows 服务器时)

✅ 使用命令行 sftp(Linux/Mac)

确保本地终端是 UTF-8:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

再连:

sftp user@centos_ip

四、已经是 GBK 文件名怎么办?

方案 1:在服务器上转码(推荐)

convmv -f gbk -t utf-8 -r --notest /path

安装:

sudo yum install convmv

方案 2:压缩后再传

tar zcvf file.tar.gz dir/

tar 不会改文件名编码,解压端再用对应编码处理。


五、Windows → CentOS 常见坑

场景 解决
WinSCP 乱码 选项中设置 UTF-8
Xshell 乱码 终端编码改 UTF-8
中文文件名变成 ? 服务器没开 UTF-8

六、终极建议(企业级)

✅ 统一标准:UTF-8

  • 服务器
  • 客户端
  • 文件命名
  • 程序读写

如果你愿意,可以告诉我:

  • 用的什么客户端(FileZilla / WinSCP / 命令行)
  • 乱的是文件名还是内容
  • CentOS 版本(cat /etc/redhat-release)

我可以直接给你“对症下药”的命令。

0 踩