注意:这里主要解决的是图形界面、远程登录界面的中文乱码问题
系统原生的终端(如虚拟机系统显示的终端),由于使用的是十分原始的 TTY 终端,使用点阵字体进行显示,点阵字体不支持中文,因此无法显示中文
关于此问题的讨论见倒数第 3 章【One more thing】
0. 一些好看的字体
https://www.thosefree.com/design/fonts
- 黑体:鸿蒙字体 HarmonyOS Sans SC、OPPO Sans、MI Sans
- 宋体:思源宋体
- 楷体:霞鹜文楷
- 趣味体:得意黑
- 标题黑体:金山云技术体、庞门正道标题体
- 通用字体(非官方,中文+等宽英文的组合):微软雅黑Mono、微软雅黑-JBMono
1. 字体配置:解决显示乱码问题
总体思路:- Linux 系统侧:正确安装好中文字体
- 确认是否有字体库 --> 没有则【安装字体库】
- 确认是否有中文字体 --> 没有则【安装中文字体】,有以下两种安装方法:
- 可通过【软件包安装】部分官方中文字体
分析:简单,只需要会安装软件包即可;但只能安装几种官方字体 - 也可手动将中文字体文件【手动添加到字体库】中
分析:操作比较复杂,要改配置;但可安装任意类型的字体
- 可通过【软件包安装】部分官方中文字体
- 确认当前【系统语言格式为中文格式】
- (若要保证系统原生终端正常显示英文) 修改当前【系统语言为英文】
- 远程软件侧:正确配置,保证中文能正常显示
参考文档:
Linux 系统侧 – a 到 b 步骤:
- https://zhuanlan.zhihu.com/p/338919711
- https://www.cnblogs.com/xiaoniandexigua/p/17896240.html
Linux 系统侧 – d 步骤:
- https://man.archlinux.org/man/locale.conf.5.zh_CN
1.1 确认是否有字体库
fc-list
- 若提示“命令无效、未找到命令”等,则说明:没有字体库 --> 需要【安装字体库】
- 若有输出,则说明:有字体库 --> 请看【是否有中文字体】
正常输出类似这种:会输出当前识别到的所有字体的列表
1.2 确认是否有中文字体
fc-list :lang=zh-cn
- 查到有文字列表:说明有中文字体,列出的字体就是中文字体 --> 请看【确认当前系统显示的语言为中文】
- 查询没报错但没有输出:说明没有中文字体 --> 需要【安装中文字体】
以下是示例,查询的是日文的字体,显示如果【没有输出】是啥样的
- 查询报错:字体库没有安装成功,参考【Linux 系统 a-b 步骤】的参考文档,重新安装
1.3 安装中文字体
1.3.1 安装中文字体软件包
这里安装【文泉驿正黑】字体,这是一款免费、开源、可免费商用字体字体介绍:http://wenq.org/wqy2/index.cgi
安装命令
sudo dnf install -y fonts-wqy-zenhei
安装后刷新字体库
fc-cache -f -v
重新检查是否有安装的字体
fc-list :lang=zh-cn
以下字体是新安装的字体
1.3.2 字体库手动添加字体
参考文档:[https://www.cnblogs.com/xiaoniandexigua/p/17896240.html](https://www.cnblogs.com/xiaoniandexigua/p/17896240.html)1.4 确认当前系统支持显示中文(编码类型为 UTF-8)
输入以下指令,确定当前语言相关的配置(系统环境变量)locale
要求LANG=zh_CN.UTF-8
其中 zh_CN = 当前设置的地区,日期货币等显示格式以此为准,UTF-8 = 采用的编码格式,要为 UTF-8
- 若是,则说明系统已经支持中文环境 --> 请看【远程终端软件的配置】
- 若不是 --> 需要【修改系统语言环境为中文环境】
2. 修改系统语言环境为中文环境
-
打开配置文件:
/root/.bashrc
-
在配置文件中添加相关配置(设置环境变量 LANG 的值为 zh_CN.UTF-8)
# 将这一行添加到文件的新一行 export LANG="zh_CN.UTF-8"
-
保存配置文件
-
使配置文件生效
source /root/.bashrc
-
重开一个新的命令行窗口,检查设置是否生效
locale
查看
LANG
的值是否正确
完成以上设置后,远程打开一个中文文件,其中的中文应该能正常显示了
3. One more thing
完成上面的步骤后,远程登录显示的文字无问题了,但有可能使用本地终端打开时,都是方块字了究其根本原因:本地原生终端(runlevel ≤ 3 级别)为非常原始的 TTY 终端,使用的字体是点阵字体,这种点阵字体最多只支持 512 种字符,不支持 UTF-8 编码的中文内容
而上面的修改,有可能会把系统显示的语言也改成中文,导致系统报错、帮助、输出都带中文,原生终端都无法显示
解决方案:
- 显示的语言为英文,但支持中文
可以理解为如同在华外国人,使用的电脑支持装中文软件、看中文文档,但系统显示的还是英文
好处:日常系统级操作输出是英文,能正常显示;远程连接打开中文文档由于环境支持也能正常显示
坏处:只解决了部分问题,若在本地打开中文文档,中文仍无法显示 - 换字体,即使是残缺的中文也比一个都显示不出来好(?)
参考这个项目:https://github.com/oldherl/syllazh
- 使用一些魔法程序包(程序员的力量是无限的😎)如
zhcon
。项目地址:https://zhcon.sourceforge.net/
下面介绍一下第一种方法,其他方法由于对系统破坏性较大,不建议使用,请自行尝试
4. (保证本地终端兼容性)设置当前系统语言为英文
参考文章:https://man.archlinux.org/man/locale.conf.5.zh_CN
如果要保证系统原生的终端也能正常显示,则必须使用英文为语言
否则会出现以下情况:远程界面中的中文正常显示,但系统原生的终端界面显示的中文就是方块
为兼容两方面的需求,可设置为:中文语言格式(如显示格式、区域、按键布局)、但显示(如报错提示等)用英文
使用localectl
命令来实现
localectl set-locale LANG="zh_CN.UTF-8" LC_MESSAGES="en_US.UTF-8"
LANG=
指定语言格式(如果不同时设置其他的参数,则会自动设置对应的显示语言、键位等参数LC_MESSAGES=
指定系统输出语言格式,相当于指定系统的显示语言
修改后查看localectl
状态
修改后需要重启服务器才能生效
可看到,在系统原生的终端界面中,系统显示语言为英文,日常操作输出的都是英文,日常系统级操作OK
但实际上这种方法只能供应急使用,若在原生终端中打开中文显示字符依旧会是方框
总结:要想显示中文,还是得远程登录(如用 MobaXterm、secureRT 等工具远程登录),本地的终端只能显示英文
5. 远程终端软件的配置
MobaXterm 参考我的另一篇笔记:MobaXterm基本使用 – 服务器状态、批量操作、字体设置、修复zsh按键失灵