一、背景
最近一直在重写2021年毕设的前端页面,用vue3+vite实现的响应式布局,目前完成10%。但在部署到Linux上时,遇到了服务端生成的中文验证码混乱的问题,通过远程断点,排除编码的问题,原来是由于Linux没有中文字体导致。
两年前的毕业设计,是想做一个支持动态业务逻辑的签到系统,我随时随地都可以修改业务逻辑,哪怕拉着屎,灵感一来,手机当场修改业务逻辑。由于当时眼界、技术都比较短浅,最终只是做了一个类似于binux/qiandao: 签到,但功能还要更简陋的系统。
能力在一点点进步,系统也在一直迭代,21年的雏形,22年的重写,23年的全部推翻。
结果发现,预期的系统就像现在比较火的工作流引擎或是低代码平台,虽然是简易版。
不得不自恋一下,我真有远见。不过这也说明,创造是由需求推动的。当大众都有这个需求的时候,就是猪都能飞起来的风口了吧。
二、安装中文字体
2.1 验证环境
首先查看服务器是否安装了字体,若没安装,就进行安装
# 验证是否安装
yum info fontconfig
# 若没安装,进行安装
yum -y install fontconfig
2.2 查询字体
查询已有字体
# 查询所有字体
fc-list
# 查询所有字体详细信息
fc-list -v
# 查询所有字体简略信息
fc-list -b
# 查询中文字体
fc-list :lang=zh
# 查询英文字体
fc-list :lang=en
此时系统上,是没有中文字体的。这时候的验证码(使用楷体生成的验证码)是这个样子。
这时候,验证一下楷体,在Linux上使用的字体
for family in 楷体 楷体_GB2312; do echo -n "$family: "; fc-match "$family"; done
可以看到,是使用一款英文字体解析的,那肯定不对啊。
2.3 安装字体
2.3.1 上传中文字体
在Win上可以,在Linux不可以。因此Win上是有楷体的,只需要上传至Linux即可。
进入Windows的目录C:\Windows\Fonts
下,找到楷体(对应的名称是simkai.ttf),然后上传至Linux
Windows想要使用Linux上的命令,可以安装git bash,或者直接使用xftp也可。
我就是喜欢奇技淫巧,没办法,所以用了git bash
mkdir -p /usr/share/fonts/zh
#登录进入sftp。sftp是ssh内含的协议,只要sshd服务器启动了,它就可用
sftp root@10.0.0.10
# 在sftp中执行命令上传
put simkai.ttf /usr/share/fonts/zh
2.3.2 安装并验证字体
进入到Linux系统,再次查询所有字体和中文字体,命令参考2.2。
fc-list :lang=zh
此时如果没有,需要执行以下三个命令刷新缓存
mkfontscale
mkfontdir
fc-cache -fv
再次执行命令,验证安装是否成功。
for family in 楷体 楷体_GB2312; do echo -n "$family: "; fc-match "$family"; done
此时,就大功告成了。
三、参考致谢
linux - CentOS7安装中文字体 - 吴尼玛的技术后花园 - SegmentFault 思否
在Centos7.X上安装中文字体及相关配置_centos 安装字体没有mkfontscale 和mkfontdir_路飞onepiece的博客-CSDN博客