Linux命令行创建、输入、编辑、显示中文字符以及安装中文字体

2024-06-27 20:03:00
丁国栋
原创 825
摘要:本文介绍如何在Debian/Ubuntu和RedHat/CentOS Linux里输入和显示中文。解决无法输入、无法显示中文的情况,以及如何安装中文字体。同时也适用于在容器环境输入和显示中文。

第一部分 如何创建、输入、显示中文


通常我们需要远程到Linux服务器,它可能是一台主机、虚拟机也可能是容器。要想终端能输入并显示中文,需要安装中文支持并设定SSH客户端的编码。

假设我们使用xshell作为ssh客户端,可以设置编码为 Unicode(UTF-8) ,这通常是最普遍最通用的做法。

在RedHat和Debian中有较大的不同,本文以 CentOS/Ubuntu 为例介绍如何在终端里显示中文。


下面是CentOS环境

docker run --rm -it -v /etc/localtime:/etc/localtime centos:7 /bin/bash

只需要执行,即可显示中文

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

如果期望这个设置长期有效或者重启后依然有效,对于bash shell可以将上述两条写入~/.bash_profile文件或者~/.bashrc里。

注:实际上只需要设置 export LC_ALL=en_US.UTF-8 即可,而且值可以是多种,只要是带UTF-8即可,例如en_AU.utf8、en_HK.utf8、en_GB.utf8等等。

注:LCLocale Category 地区分类 的缩写,用于指定与地区或语言相关的设置,比如日期格式、货币符号和排序规则等。


下面是Ubuntu环境

docker run --rm -it -v /etc/localtime:/etc/localtime ubuntu:jammy /bin/bash

如果仍然按照上面CentOS的方法,只能显示中文,但可能无法实现输入中文,那是因为Ubuntu下默认没有en_US.UTF-8的语言选项。

所以正确的办法是:

export LC_ALL="C.UTF-8"
执行后,可以再次执行bash即可生效,当然也可以重启容器或者重新进入容器。


重点:无论使用哪一个环境,都可以使用 locale 查看当前系统的区域设置,Ubuntu 和 CentOS 默认都是 POSIX 。使用命令 locale -a 可以查看当前系统支持的区域设置(语言设置)。默认情况下Ubuntu是只有C、C.UTF-8、POSIX三个,而CentOS就支持的较多,例如有en_GB.utf8、en_US.utf8等五十多个。


如果只是期望在vim 里显示中文,可以在命令模式使用 'set encoding=utf8' 设置显示中文。


另外我们需要养成一个“好习惯”,尽可能的在Linux系统避免使用中文作为名称,在安装系统时默认语言也使用英文,这样可以减少很多乱码的情况。


第二部分 如何安装中文字体

对于yum、.rpm包管理器的操作系统,比如RHEL、CentOS


yum install -y xorg-x11-font-utils fontconfig # 安装必要的工具
yum groupinstall fonts -y # 这一步是安装了大多数可用的字体,使用yum groups info fonts查看要安装的列表,gnu-free-mono-fonts、gnu-free-sans-fonts、gnu-free-serif-fonts等
fc-list :lang=zh # 列出有哪些是中文的字体
fc-cache -vf # 更新字体缓存

对于apt、dpkg、.deb包管理器的操作系统,比如Debian、Ubuntu


sudo apt install fontconfig -y
sudo apt install language-pack-zh-hans -y
如果需要使用Windows下已有或已安装的字体,则再将Windows下的字体 C:\Windows\fonts 打包到 /usr/share/fonts/WindowsFonts/ 下,执行以下命令
mkfontscale
mkfontdir
fc-cache -vf # not need reboot or restart
fc-list
fc-list :lang=zh


重要提示:很多字体是有版权保护的,有些是个人可以使用组织不能商用,有些是Windows下可以使用其他系统不能使用。例如大家熟知的微软雅黑,既不能商用也不能用在非Windows系统。Mac OSX上有些字体同样也是。

--

发表评论
博客分类