Mac Zsh终端中文文件名乱码需按三层次排查:一、终端偏好设置中启用Unicode (UTF-8)编码并重启;二、在~/.zshrc中添加export LANG="en_US.UTF-8"和export LC_ALL="en_US.UTF-8"后source生效;三、用convmv工具按原始编码(如GBK)批量转为UTF-8。
mac 上 zsh 终端显示中文文件名乱码,本质是“系统解析文件名时用的编码”和“文件名实际存储的编码”不匹配。排查要从终端渲染层、shell 环境层、文件系统层三方面逐级验证,不是只改一个地方就能解决。
一、确认终端本身支持 UTF-8 渲染
即使 Shell 设置正确,如果终端应用没启用 UTF-8 编码,照样无法显示中文。
- 打开“终端”→“偏好设置”→选中当前配置(如 Pro)→点“文本”标签页
- 检查“字符编码”是否为 Unicode (UTF-8);如果不是,请手动选中并关闭设置
- 重启终端窗口(不是新建标签页),确保底层渲染层已加载 UTF-8 支持
二、验证 Zsh 的 locale 环境变量是否生效
Zsh 启动时若未加载正确的本地化设置,ls、git status 等命令输出的中文路径就会回退到 C locale,表现为问号或方块。
- 在终端中运行
locale,看LANG和LC_ALL是否以.UTF-8结尾(如en_US.UTF-8或zh_CN.UTF-8) - 如果为空或显示
C,说明环境变量未加载 → 编辑~/.zshrc - 在文件末尾添加两行(注意等号前后无空格,值带英文双引号):
export LANG="en_US.UTF-8"export LC_ALL="en_US.UTF-8" - 执行
source ~/.zshrc生效;再运行locale确认输出已更新
三、检查文件名本身的编码来源
乱码往往不是终端错了,而是文件名当初就用非 UTF-8 编码写入的——比如从 Windows ZIP 解压、或用旧脚本创建。这时改终端设置没用,得修复文件名本身。
- 先判断原始编码:常见有
GBK(Windows 中文)、latin1(部分旧工具误存) - 安装
convmv:brew install convmv - 进入乱码目录,试运行预览命令(加
--notest会真实重命名,先别加):convmv -f gbk -t utf-8 -r ./(假设原为 GBK)convmv -f latin1 -t utf-8 -r ./(假设原为 Latin-1) - 观察输出是否出现 converted file names;确认无误后,去掉
--notest再执行一次完成修正
四、排除 Git 或第三方工具干扰
某些命令(尤其是 git)会额外读取自己的编码配置,覆盖系统 locale。
- 运行
git config --get core.quotepath,若返回true,则 Git 会对路径做转义 → 执行:git config --global core.quotepath false - 检查 Git 的日志/提交编码:
git config --get i18n.commit.encoding(应为utf-8)
若为空,设为:git config --global i18n.commit.encoding utf-8 - VSCode 集成终端用户还需检查:
设置里搜索terminal.integrated.env.osx,确保没覆盖LANG或LC_ALL
排查顺序不能跳步:先让终端能渲染 UTF-8,再让 Zsh 告诉系统“我用 UTF-8”,最后确认文件名确实是 UTF-8 存的。三者缺一不可。


















