设置系统语言环境
约 503 字大约 2 分钟
2026-08-29
日志出现中文乱码、程序输出问号 ???、man 页面显示异常,多数是系统语言环境(locale)与终端编码不匹配。本文覆盖 Linux 语言环境的查看与设置、乱码处理,以及时区设置的指引。
查看当前语言环境
locale # 查看全部 locale 变量
echo $LANG # 当前会话语言
locale -a | grep zh # 已安装的中文 localezh_CN.UTF-8 为简体中文,en_US.UTF-8 为英文;推荐统一用 UTF-8 编码。
设置中文环境
CentOS / Alma / Rocky
# 安装中文语言包
sudo dnf install -y glibc-langpack-zh
# 设置系统默认语言
sudo localectl set-locale LANG=zh_CN.UTF-8Ubuntu / Debian
# 安装中文语言包
sudo apt install -y language-pack-zh-hans
# 设置系统默认语言
sudo update-locale LANG=zh_CN.UTF-8设置完成后重新登录 SSH 生效;已有服务(如 Java)需重启才会使用新语言环境。
改回英文环境
sudo localectl set-locale LANG=en_US.UTF-8乱码排查三步
- 系统 locale 是否为 UTF-8:
locale输出里不应出现POSIX或C; - SSH 客户端编码:Xshell 在"会话属性 → 终端 → 编码"中选 Unicode (UTF-8);Windows 自带 OpenSSH 终端可用
chcp 65001切到 UTF-8; - 个别文件名乱码:文件创建时的编码与当前环境不同导致,可用
convmv工具转换文件名编码(--notest前务必先加-r --test预览)。
保持客户端与服务器一致
乱码的本质是"两端编码不一致"。服务器固定 UTF-8 后,把所有 SSH 客户端也统一为 UTF-8,问题即消失。
时区设置
时区不属于 locale,但常被一起问:日志时间"差 8 小时"就是时区问题:
sudo timedatectl set-timezone Asia/Shanghai
timedatectl # 验证 Time zone 与系统时钟NTP 校时与时间体系详见系统时间与时区设置。Windows 侧的时区在"设置 → 时间和语言"中调整。
