中文乱码核心是locale未启用或不匹配,字体仅为渲染环节;须先确认LANG为zh_CN.UTF-8且locale -a有输出,再安装中文字体并刷新fontconfig缓存,同时确保SSH及终端客户端设为UTF-8编码。

locale -a 能列出所有可用 locale,但不等于已安装语言包
不少人错误地认为,只要在locale -a的输出中看到了zh_CN.UTF-8,就意味着中文语言包已经“安装完毕”。实际上,它仅仅表明该locale已经被生成(即locale-gen已经运行过),但底层所依赖的语言数据(如翻译、时区、货币符号等)却有可能并不存在。真正决定语言包“是否完整安装”的,是系统级语言包本身。
Debian/Ubuntu:用 apt-cache search + dpkg -l 确认 language-pack-zh-hans
在 Ubuntu 或 Debian 上,中文支持由 language-pack-zh-hans(简体)或 language-pack-zh-hant(繁体)提供。仅靠 locale -a | grep zh_CN 不足以判断它是否装好。
- 查是否已安装:运行
dpkg -l | grep language-pack-zh-hans,输出含ii表示已安装 - 查是否有该包可用:运行
apt-cache search language-pack-zh,确认源中存在对应包名 - 如果没装但源里有,直接
sudo apt install language-pack-zh-hans - 装完必须再执行
sudo locale-gen zh_CN.UTF-8,否则locale -a仍不会显示
RHEL/CentOS/Rocky/AlmaLinux:yum/dnf groupinfo “Chinese Support” 是关键
Red Hat 系发行版把语言支持打包成“group”,不是单个 RPM。直接 rpm -qa | grep chinese 很容易漏掉,因为核心文件分散在多个子包里。
- 查看组是否存在且已安装:
dnf groupinfo "Chinese Support"(RHEL8+/Rocky/Alma)或yum groupinfo "Chinese Support"(RHEL7/CentOS7) - 状态栏显示
Installed: Yes才算真正装好;若为No,运行sudo dnf groupinstall "Chinese Support" - 注意:某些最小化安装镜像默认禁用 group,需先确认
/etc/yum.repos.d/下 baseos/appstream 仓库启用 - 装完仍要检查
locale -a | grep zh_CN.UTF-8—— 若无输出,需手动编辑/etc/locale.conf或运行localectl set-locale LANG=zh_CN.UTF-8并重启会话
终端乱码不是语言包没装,而是 SSH 或本地终端编码不匹配
即使 locale 显示 LANG=zh_CN.UTF-8、locale -a 和 dpkg -l 都正常,终端仍显示方块或问号,大概率是客户端编码没对齐。
- SSH 客户端(如 Xshell、Termius、macOS Terminal)必须设置字符编码为
UTF-8,不能选 GBK 或 ISO-8859-1 - Linux 图形终端(GNOME Terminal、Konsole)需在首选项里确认“编码”设为
UTF-8 echo $LANG在远程 SSH 会话里返回正确值,不代表客户端渲染层支持 UTF-8 字符 —— 这点最容易被忽略