商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux系统怎么设置中文字符集 解决乱码问题

Linux系统怎么设置中文字符集 解决乱码问题

  发布于2026-05-21 阅读(0)

扫一扫,手机访问

遇到Linux系统中文乱码,先别急着折腾字体或者数据库配置。问题的根源,八成出在字符集环境变量没设对,或者是终端工具的编码没跟上。咱们一步步来,把问题揪出来。

Linux系统怎么设置中文字符集 解决乱码问题

检查当前 LANG 和可用中文 locale

第一步,先看看系统当前的语言环境。打开终端,直接运行:

echo $LANG
locale -a | grep zh_CN

如果第一行输出是 en_US.UTF-8 或者干脆是空的,那基本可以断定,中文 locale 要么没启用,要么压根就没装。如果第二行命令返回了类似 zh_CN.utf8zh_CN.UTF-8 的结果,那就说明系统里其实有中文包,只是没激活而已。

  • CentOS/RHEL 系列:安装中文支持通常用 yum groupinstall "Chinese Support",或者安装基础包 yum install glibc-common。一些老版本可能还需要额外安装 kde-l10n-Chinese
  • Ubuntu/Debian 系列:执行 sudo apt-get install language-pack-zh-hans 安装语言包,然后运行 sudo dpkg-reconfigure locales,在弹出的列表里勾选上 zh_CN.UTF-8

这里有个细节要注意:有些系统提供的 locale 名称是小写的 zh_CN.utf8,而不是大写的 UTF-8。设置的时候必须严格匹配,否则像 export LANG=zh_CN.UTF-8 这样的命令就会静默失败,让你白忙活一场。

永久设置 LANG 而不被 SSH 客户端覆盖

很多朋友明明在服务器上配好了 /etc/locale.conf/etc/environment,可一通过 SSH 连上去,又变回英文了。这是怎么回事?

问题往往出在 SSH 客户端身上。像 Xshell、SecureCRT、Windows Terminal 这些工具,默认会把自己的语言环境变量(比如 LANG=en_US.UTF-8)发送给服务器,从而覆盖掉服务器本地的设置。

  • 服务器端设置:对于 CentOS/RHEL,在 /etc/locale.conf 里写入 LANG="zh_CN.UTF-8";对于 Ubuntu,则修改 /etc/default/locale 文件。改完后别忘了用 source 命令让配置立即生效(例如 source /etc/locale.conf)。
  • 关键一步:禁用 SSH 环境变量传递:编辑 SSH 服务端的配置文件 /etc/ssh/sshd_config,找到以 AcceptEnv 开头的那一行。确保这一行里没有包含 LANGLC_* 这类变量。通常的做法是直接注释掉或删除这一整行,比如将 AcceptEnv LANG LC_* 改为 #AcceptEnv LANG LC_*。修改完成后,重启 SSH 服务:CentOS 用 sudo systemctl restart sshd,Ubuntu 用 sudo systemctl restart ssh

终端和远程连接工具的编码必须同步

就算服务器端的 LANG 设置得完美无缺,如果你用的终端工具编码不对,屏幕上显示的依然会是方块或者问号。所以,客户端这边也得调对。

  • SecureCRT:打开【Options】→【Session Options】。先在【Appearance】里把字体编码选成 UTF-8;然后进入【Translation】标签页,将 “Remote character set” 也改为 UTF-8(注意不要选成 “Use font encoding”)。
  • Xshell:进入【文件】→【属性】→【终端】,在编码下拉框中选择 UTF-8。同时,在【字体】设置里,确认使用的字体是支持中文的,比如 DejaVu Sans MonoWenQuanYi Zen Hei
  • Windows Terminal 连接 WSL 或远程 Linux:需要在设置的 JSON 配置文件里,确保 "locale": "zh_CN.UTF-8" 这一项已设置,并且 "fontFace" 指定的字体(如 "Cascadia Code")已经安装且包含 CJK 字形。

vim 和 less 查看中文文件仍乱码?别漏掉 fileencoding

有时候系统环境都对了,但用 vim 打开某个中文文本还是乱码。这时可以在 vim 的命令模式下输入 :set fileencoding? 查看一下。如果显示的是 latin1iso-8859-1,那就说明 vim 没有自动识别出文件的正确编码。

  • 临时解决:在 vim 里输入 :set fileencoding=utf-8,然后保存退出 (:wq) 即可。
  • 一劳永逸:在你的用户目录下的 ~/.vimrc 配置文件中加入下面两行:
    set encoding=utf-8
    set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
    这样 vim 就会按顺序尝试用列表中的编码来打开文件,通常就能正确识别中文了。
  • 关于 less 命令less 默认可能不支持 UTF-8 渲染中文。可以设置环境变量 export LESSCHARSET=utf-8 来修正。同时,也要确保 LESS 环境变量本身没有禁用颜色或分页功能。

最后提醒一个最容易踩的坑:LANG 环境变量的设置,通常只对新打开的终端会话生效。如果你是在一个已经存在的终端窗口里修改了配置并执行了 source,这个窗口本身的环境可能并不会更新。所以,改完配置后,最稳妥的方式是关闭当前终端,重新登录,或者新开一个标签页再测试。别在旧的窗口里反复尝试,然后怀疑人生。

本文转载于:https://www.php.cn/faq/2444834.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注