下面是一篇可直接放进 Hugo 的日志,偏记录型,干净可复用。

问题现象

从 Windows 通过 SSH 连接 mac,执行 ls 时,目录中的中文文件名全部显示为乱码,例如一串问号或不可读字符。本地 mac 终端显示正常。

初步判断

文件本身未损坏。
问题出在 SSH 会话中的字符编码环境,终端按非 UTF-8 方式解析文件名。

排查过程

1. 确认文件名是否正常

mac 本机终端 执行:

ls

中文显示正常,说明文件系统无问题。

2. 检查 SSH 会话的语言变量

SSH 登录后的 mac 执行:

locale

发现 LANGLC_ALL 为空或不包含 UTF-8。

3. 设置 mac shell 的 UTF-8 环境

mac 默认使用 zsh,编辑配置文件:

nano ~/.zshrc

加入:

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

使配置生效:

source ~/.zshrc

重启ssh服务

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist&&sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

重新 SSH 登录。

4. 检查 Windows 侧终端编码

  • Windows Terminal / PowerShell:默认 UTF-8
  • CMD:需手动切换
chcp 65001
  • Git Bash:一般无需处理

5. 验证

在 SSH 会话中执行:

echo $LANG

只要输出包含 UTF-8,中文文件名即可正常显示。

结论

中文文件名乱码多半由终端字符编码不一致引起。 mac 本机显示正常,SSH 会话异常,优先检查 locale 与终端编码。

这个问题属于环境配置问题,修正一次即可长期生效。