自学内容网 自学内容网

Centos/fedora/openEuler 终端中文显示配置

注意:这里主要解决的是图形界面、远程登录界面的中文乱码问题
系统原生的终端(如虚拟机系统显示的终端),由于使用的是十分原始的 TTY 终端,使用点阵字体进行显示,点阵字体不支持中文,因此无法显示中文
关于此问题的讨论见倒数第 3 章【One more thing】

0. 一些好看的字体

https://www.thosefree.com/design/fonts

  1. 黑体:鸿蒙字体 HarmonyOS Sans SC、OPPO Sans、MI Sans
  2. 宋体:思源宋体
  3. 楷体:霞鹜文楷
  4. 趣味体:得意黑
  5. 标题黑体:金山云技术体、庞门正道标题体
  6. 通用字体(非官方,中文+等宽英文的组合):微软雅黑Mono、微软雅黑-JBMono

1. 字体配置:解决显示乱码问题

总体思路:
  1. Linux 系统侧:正确安装好中文字体
    1. 确认是否有字体库 --> 没有则【安装字体库】
    2. 确认是否有中文字体 --> 没有则【安装中文字体】,有以下两种安装方法:
      1. 可通过【软件包安装】部分官方中文字体
        分析:简单,只需要会安装软件包即可;但只能安装几种官方字体
      2. 也可手动将中文字体文件【手动添加到字体库】中
        分析:操作比较复杂,要改配置;但可安装任意类型的字体
    3. 确认当前【系统语言格式为中文格式】
    4. (若要保证系统原生终端正常显示英文) 修改当前【系统语言为英文】
  2. 远程软件侧:正确配置,保证中文能正常显示

参考文档:

Linux 系统侧 – a 到 b 步骤:

  1. https://zhuanlan.zhihu.com/p/338919711
  2. https://www.cnblogs.com/xiaoniandexigua/p/17896240.html

Linux 系统侧 – d 步骤:

  1. 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

1.4 确认当前系统支持显示中文(编码类型为 UTF-8)

输入以下指令,确定当前语言相关的配置(系统环境变量)
locale

要求LANG=zh_CN.UTF-8

其中 zh_CN = 当前设置的地区,日期货币等显示格式以此为准,UTF-8 = 采用的编码格式,要为 UTF-8

  • 若是,则说明系统已经支持中文环境 --> 请看【远程终端软件的配置】
  • 若不是 --> 需要【修改系统语言环境为中文环境】

2. 修改系统语言环境为中文环境

  1. 打开配置文件:/root/.bashrc

  2. 在配置文件中添加相关配置(设置环境变量 LANG 的值为 zh_CN.UTF-8)

    # 将这一行添加到文件的新一行
    export LANG="zh_CN.UTF-8"
    
  3. 保存配置文件

  4. 使配置文件生效

    source /root/.bashrc
    
  5. 重开一个新的命令行窗口,检查设置是否生效

    locale
    

    查看LANG的值是否正确

    完成以上设置后,远程打开一个中文文件,其中的中文应该能正常显示了

3. One more thing

完成上面的步骤后,远程登录显示的文字无问题了,但有可能使用本地终端打开时,都是方块字了

究其根本原因:本地原生终端(runlevel ≤ 3 级别)为非常原始的 TTY 终端,使用的字体是点阵字体,这种点阵字体最多只支持 512 种字符,不支持 UTF-8 编码的中文内容

而上面的修改,有可能会把系统显示的语言也改成中文,导致系统报错、帮助、输出都带中文,原生终端都无法显示

解决方案:

  1. 显示的语言为英文,但支持中文
    可以理解为如同在华外国人,使用的电脑支持装中文软件、看中文文档,但系统显示的还是英文
    好处:日常系统级操作输出是英文,能正常显示;远程连接打开中文文档由于环境支持也能正常显示
    坏处:只解决了部分问题,若在本地打开中文文档,中文仍无法显示
  2. 换字体,即使是残缺的中文也比一个都显示不出来好(?)
    参考这个项目:https://github.com/oldherl/syllazh
  3. 使用一些魔法程序包(程序员的力量是无限的😎)如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按键失灵


原文地址:https://blog.csdn.net/weixin_44112083/article/details/142471370

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!