ubuntu设置中文语言编码核心是三步:生成zh_cn.utf-8 locale、正确配置/etc/default/locale(lang=zh_cn.utf-8,lc_all可设同值)、重启会话或重载环境;缺一步即导致乱码或locale报错。

直接说结论:Ubuntu 设置系统语言编码,核心是三步——生成目标 locale、写入系统级配置、重启或重载环境。跳过任何一步都可能显示乱码或 locale 报错。
如何确认并生成 zh_CN.UTF-8 locale
很多用户改完 /etc/default/locale 后 locale 仍报 Cannot set LC_ALL to default locale,根本原因是 locale 文件根本没生成。
- 先查是否已支持:
locale -a | grep zh_CN—— 如果无输出,说明还没生成 - 编辑
/etc/locale.gen,取消注释这行:zh_CN.UTF-8 UTF-8 - 运行
sudo locale-gen(不是dpkg-reconfigure locales,后者只在旧版本 Ubuntu 中必要) - 验证:
locale -a | grep zh_CN.UTF-8应有且仅有一行输出
/etc/default/locale 配置的关键字段和陷阱
这个文件控制全局默认 locale,但字段优先级和含义容易混淆。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
-
LANG是基础 fallback,必须设为已生成的 locale(如zh_CN.UTF-8),不能写成zh_CN.utf8(小写不生效) -
LC_ALL是最高优先级,会覆盖所有其他LC_*变量;设它等于LANG最省事,但调试时建议先留空 -
LANGUAGE控制多语言 fallback 顺序,中文场景推荐:zh_CN:zh:en_US:en(优先中文,退化到英文) - 不要手动写一堆
LC_TIME、LC_MONETARY—— 它们会被LANG或LC_ALL自动继承,冗余反而易出错
为什么改了 /etc/default/locale 还不生效?
常见原因不是配置错,而是环境没重载。
- SSH 登录后,shell 不自动读取
/etc/default/locale;需运行source /etc/default/locale才对当前会话生效 - 图形界面(GNOME/KDE)需完全注销再登录,
systemctl restart gdm3不够 - 如果用 Docker 或 systemd service,它们默认不继承系统 locale,得显式加
Environment=LANG=zh_CN.UTF-8 - 终端模拟器(如 gnome-terminal、xterm)本身也有编码设置,若设为 GBK/GB2312,即使系统是 UTF-8 也会乱码
ssh 连接后中文仍乱码怎么办
这是客户端和服务端编码不匹配的典型表现,和 Ubuntu 本体设置无关。
- 服务端确认:
locale | grep LANG输出应全为zh_CN.UTF-8 - 客户端(如 Xshell、SecureCRT、Windows Terminal)必须将字符编码设为
UTF-8,不是GBK或Auto - Windows 命令提示符(cmd)默认不支持 UTF-8,改用
PowerShell并执行chcp 65001 - VS Code Remote-SSH 用户注意:
"remote.SSH.env": {"LANG": "zh_CN.UTF-8"}要加在设置里,否则 SSH 会话仍用 C locale
最常被忽略的是:locale 文件没生成就去改配置,以及 SSH 客户端编码没同步。这两点占了乱码问题的八成以上。










