应同时设置lang和lc_all为相同utf-8值(如en_us.utf-8),先验证locale支持,再写入对应shell配置文件(~/.zshrc或~/.bash_profile),并source生效;仅设lang可能导致部分命令回退至c locale而显示乱码。
直接在 shell 配置文件里加 export lang="zh_cn.utf-8" 或 export lang="en_us.utf-8" 即可,但必须确保系统已启用对应 locale,且配置文件选对、生效方式正确。
确认当前 LANG 是否有效
先运行命令查看现状:
-
echo $LANG—— 若输出为空、C或POSIX,说明未设置或设置失败 -
locale -a | grep -i "zh_cn\|en_us"—— 检查系统是否支持目标 locale(如zh_CN.UTF-8)
macOS 原生不预装 zh_CN.UTF-8,常见可用的是 en_US.UTF-8。若 locale -a | grep zh_CN 无输出,建议优先用 en_US.UTF-8,避免后续乱码。
编辑正确的 Shell 启动文件
先确认你用的是哪个 Shell:
-
echo $SHELL输出/bin/zsh→ 编辑~/.zshrc - 输出
/bin/bash→ 编辑~/.bash_profile(注意:macOS Catalina 及之后默认 zsh,bash 需手动切换)
用编辑器打开对应文件,例如:
nano ~/.zshrc- 在文件末尾添加两行(引号不可省):
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
保存后执行 source ~/.zshrc(或 source ~/.bash_profile)使配置立即生效。
为什么推荐同时设 LC_ALL
LC_ALL 的优先级高于 LANG,能覆盖所有 locale 相关子项(如 LC_TIME、LC_COLLATE)。只设 LANG 时,某些命令(如 ls、git log)仍可能因其他 locale 变量未定义而回退到 C locale,导致中文路径显示为 ? 或乱码。
所以这两行通常一起写,且值保持一致:
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
验证是否真正生效
执行以下命令检查:
-
locale—— 应全部显示en_US.UTF-8(或你设定的值),没有POSIX或空行 -
ls或git log --oneline—— 若有中文文件名或提交信息,应正常显示,而非问号或方块 - 打开新终端窗口再运行
echo $LANG—— 确保新会话也继承该设置
如果 GUI 应用(如 VS Code 内置终端)仍不识别,需额外配置 launchd 环境,但纯终端场景只需上述步骤即可稳定生效。











