002-ls乱码问题

终端中文显示为 ??? 的问题排查与修复笔记

1. 问题现象


2. 成因分析

示例有问题的 locale:

LANG="en_CN.UTF-8"
LC_CTYPE="C"

其中 LC_CTYPE="C" 就会导致中文变成 ???


3. 排查步骤

  1. 查看当前 locale 设置
locale

重点看:

  1. 确认是否为 UTF-8

4. 修复方法(zsh 环境为例)

  1. 编辑 ~/.zshrc
nano ~/.zshrc
  1. 添加以下内容(全局使用 UTF-8)
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
  1. 让配置生效
source ~/.zshrc
  1. 验证
locale

输出应为:

LANG="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
...
LC_ALL="en_US.UTF-8"
  1. 再次 ls,中文文件名应正常显示

5. 额外建议


一句话总结

中文显示为 ???,90% 是 LC_CTYPE 或 LANG 没设为 UTF-8,改成 UTF-8 并重新加载配置即可。