源码

1
2
Color color=new Color(0, 0, 0, 200);
Font font = new Font("msyh", Font.PLAIN, 64);

情景

这套代码在 windows 平台上面跑的时候是完全没有问题的,但是在项目迁移到 Linux 的时候突然出现了中文乱码的问题。

解决方案

一开始猜想是在生成或使用字符串的时候,字符串的编码格式错误,但是断点监测全流程发现没有丝毫问题,是将文字写到图片上面的时候突然就乱码了,搜了一下发现绘图时乱码可能是字体不支持的问题,于是开始查看 Linux 的字体库。
以下命令皆为 CentOS7.2 的运行环境。

1
2
3
4
5
6
7
8
# CentOS7 安装字体库
yum install -y fontconfig
# 查看安装的字体
fc-list
# 这里查出了很多,所以筛选一下
# 查找中文字体
fc-list :lang=zh
# 发现一个都没有

这里将 windows 平台的 C:\windows\Fonts 下的微软雅黑字体拷贝到 /usr/share/fonts
就是下面这三个文件
msyh.ttcmsyhl.ttcmsyhbd.ttc

1
2
3
4
5
# 安装字体并刷新缓存
cd /usr/share/fonts
mkfontscale
mkfontdir
fc-cache -fv

运行结束正常输出汉字。