zsh 无法输入、显示中文(Debian)

现象:输入中文无反应 / 输出中文方块问号、乱码。
根本三点原因:

  1. 系统没有生成 UTF‑8 locale(最常见)
  2. zsh会话内LANG/LC_*环境变量不是UTF‑8
  3. 终端缺少中文字体,或者客户端终端本身编码不是UTF‑8

小提示:不一定要把系统语言改成中文,只要启用UTF‑8 locale,英文系统同样可以输入显示中文,推荐生产服务器使用en_US.UTF‑8

步骤1:检查当前状态

1
2
locale
locale charmap
  • charmap如果输出不是UTF‑8,说明编码环境异常。
  • locale -a | grep UTF‑8查看系统可用locale。

步骤2:Debian生成UTF‑8 locale

1
sudo nano /etc/locale.gen

取消注释:

1
2
en_US.UTF‑8 UTF‑8
zh_CN.UTF‑8 UTF‑8 # 需要中文locale再打开

保存,执行生成:

1
2
3
sudo locale‑gen
# 设置系统全局默认
sudo update‑locale LANG=zh_CN.UTF-8

步骤3:zsh配置持久化UTF‑8

编辑zsh配置 nano ~/.zshrc,文件末尾加入:

1
2
3
export LANG=zh_CN.UTF-8
export LC_CTYPE=zh_CN.UTF-8
# 服务器不建议设置 LC_ALL,会覆盖全部区域设置;桌面才用 export LC_ALL=zh_CN.UTF-8

生效:

1
2
3
source ~/.zshrc
# 测试
echo "测试中文输出"

步骤4:安装中文字体(显示方块问号时执行,服务器串口可跳过)

1
2
3
4
sudo apt update
sudo apt install fonts‑noto‑cjk fonts‑wqy‑zenhei
# 验证字体
fc‑list :lang=zh

容易踩坑的额外排查

  1. SSH远程连接:你的本地终端软件(Xshell、SecureCRT、Windows Terminal)编码必须设置为UTF‑8。服务器配置正确,但是客户端编码错,依旧乱码。
  2. 不要在.zshrcexport LC_ALL=CC编码不支持中文。
  3. Oh‑My‑Zsh主题乱码方块:需要安装Powerline兼容字体,不是locale问题。
  4. 如果你用screen/tmux:tmux本身要设置set‑g utf8 on,否则内部zsh中文异常。

快速测试命令

1
2
echo "中文测试"
# 能正常打印汉字代表显示没问题;直接键盘输入中文,看是否可以输入。