ubuntu 中文支持需同时满足三条件:生成 zh_cn.utf-8 locale、正确设置 lang/language 环境变量、安装中文字体;缺一不可,否则中文仍显示为问号或方块。

Ubuntu 默认用 en_US.UTF-8,中文文件名、终端输出、日志内容容易显示为问号或方块。要真正让系统“认得中文”,关键不是只改一个变量,而是确保三件事同时到位:locale 生成成功、环境变量生效、字体实际可用。
确认当前 locale 是否已包含 zh_CN.UTF-8
直接运行 locale -a | grep zh_CN。如果没输出,说明系统压根没生成这个 locale,后面所有配置都无效。常见错误是只改了 /etc/default/locale 却跳过了生成步骤。
-
locale -a列出所有已生成的 locale,不是“支持的列表”,而是“已编译好的列表” - 如果输出里只有
zh_CN.gb2312或zh_CN.gbk,它们不等于zh_CN.UTF-8,不能混用 - 某些最小化安装(如 Ubuntu Server、WSL)默认不带中文 locale,必须手动生成
生成 zh_CN.UTF-8 locale 的两种可靠方式
推荐优先用 dpkg-reconfigure locales,它会自动处理依赖和生成逻辑;手动编辑 /etc/locale.gen 容易漏掉空格或格式错误。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 运行
sudo dpkg-reconfigure locales,用空格选中zh_CN.UTF-8 UTF-8,再按 Tab 切到 OK 确认 - 若提示 “No locales generated”,说明
locales包未安装,先执行sudo apt install locales - 手动方式仅在自动化脚本中使用:取消注释
/etc/locale.gen中的zh_CN.UTF-8 UTF-8行,再运行sudo locale-gen - 生成后务必验证:
locale -a | grep ^zh_CN应输出zh_CN.utf8(注意小写)
设置默认 LANG 和 LANGUAGE 环境变量
只改 /etc/default/locale 不够,SSH 登录或 systemd 用户服务可能读不到它;/etc/profile 或用户级 ~/.profile 更可靠。
- 全局生效(推荐):
echo 'LANG=zh_CN.UTF-8' | sudo tee -a /etc/profile,再加一行LANGUAGE=zh_CN:en - 避免设
LC_ALL—— 它会强制覆盖所有 LC_* 变量,导致时间/数字格式异常 - 图形界面(GNOME/KDE)通常从
/etc/default/locale读取,但终端模拟器(如 gnome-terminal)默认继承 shell 环境,所以仍需配置 profile - 验证是否生效:
locale命令输出中LANG和LC_CTYPE都应为zh_CN.UTF-8
终端和 GUI 显示中文仍乱码?检查字体而非 locale
locale 正确但文字仍是方块,90% 是字体缺失,不是编码问题。Ubuntu 桌面版自带基础中文字体,Server/WSL/最小化安装则大概率没有。
- 终端乱码:装
fonts-wqy-microhei或fonts-noto-cjk,然后重启终端或重载配置fc-cache -fv - GUI 应用(如 Firefox、LibreOffice)乱码:同样需要字体,且 GNOME 设置里可能需手动指定默认字体(Settings → Fonts)
- 不要依赖
language-pack-zh-hans提供字体 —— 它只含翻译资源,不含字体文件 - WSL 用户特别注意:Windows 字体不会自动透传,必须手动复制或安装
ttf-mscorefonts-installer
最容易被忽略的是:locale 生成和环境变量设置是两步独立操作,缺一不可;而字体是第三层依赖,它不参与 locale 机制,但决定最终能否“画出来”。改完别急着 reboot,先 locale + ls 中文文件名 + cat 中文文本,三者全通才算真搞定。










