温馨提示×

linux sftp乱码怎么解决

小樊
42
2026-10-07 22:31:18
栏目: 智能运维

Linux 下使用 SFTP 出现乱码,通常是字符编码不一致导致的(服务器和客户端编码不同,常见是中文乱码)。下面按常见场景给你解决方法。


一、确认服务器编码(最常见原因)

1. 查看服务器编码

在 Linux 服务器上执行:

locale

典型正常输出(中文环境):

LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8

如果看到:

LANG=C

或

ASCII

就很可能乱码。


二、服务器端解决(推荐)

方法 1:设置 UTF-8 编码(最推荐)

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

写入环境变量(永久生效):

echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrc
source ~/.bashrc

⚠️ 如果系统没有 zh_CN.UTF-8,需要先生成:

sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

三、客户端解决(Windows / Linux)

1. Windows 使用 FileZilla(最常见)

  • 打开 FileZilla
  • 站点管理器 → 你的 SFTP 站点
  • 字符集 → 强制 UTF-8
  • 或手动设置为 zh_CN.UTF-8

✅ 这是 Windows 用户最省事的方式


2. Linux 命令行 sftp 乱码

如果是:

sftp user@host

乱码,一般是因为 本地终端编码不是 UTF-8

检查本地:

locale

设置本地为 UTF-8:

export LANG=zh_CN.UTF-8

终端(如 Xshell / Terminal)也要设置为 UTF-8


四、文件名本身已乱码(历史问题)

如果文件已经以错误编码上传,SFTP 无法自动修复。

解决方法:

  1. 在服务器上重命名文件
mv 乱码文件 新文件名
  1. 或使用 convmv(文件名编码转换):
convmv -f gbk -t utf8 --notest *

五、总结速查表

场景 解决方式
服务器是 C 编码 设 UTF-8
Windows 客户端 FileZilla 强制 UTF-8
Linux 客户端 本地 locale 设 UTF-8
文件名已乱 convmv / 重命名

如果你能告诉我:

  • 用的是 命令行 / FileZilla / Xshell / 其他
  • 是 显示乱码 还是 上传后乱码

我可以给你更精确的方案。

0 踩