Linux 下使用 SFTP 出现乱码,通常是字符编码不一致导致的(服务器和客户端编码不同,常见是中文乱码)。下面按常见场景给你解决方法。
在 Linux 服务器上执行:
locale
典型正常输出(中文环境):
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果看到:
LANG=C
或
ASCII
就很可能乱码。
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
站点管理器 → 你的 SFTP 站点zh_CN.UTF-8✅ 这是 Windows 用户最省事的方式
如果是:
sftp user@host
乱码,一般是因为 本地终端编码不是 UTF-8
检查本地:
locale
设置本地为 UTF-8:
export LANG=zh_CN.UTF-8
终端(如 Xshell / Terminal)也要设置为 UTF-8
如果文件已经以错误编码上传,SFTP 无法自动修复。
mv 乱码文件 新文件名
convmv(文件名编码转换):convmv -f gbk -t utf8 --notest *
| 场景 | 解决方式 |
|---|---|
| 服务器是 C 编码 | 设 UTF-8 |
| Windows 客户端 | FileZilla 强制 UTF-8 |
| Linux 客户端 | 本地 locale 设 UTF-8 |
| 文件名已乱 | convmv / 重命名 |
如果你能告诉我:
我可以给你更精确的方案。