Linux中ImageIO生成图片中文乱码
前言
在我的工具网站中的在线文字生成图片功能,开发是在Windows系统中进行的,在Windows中一切良好,中英文都能很好的展示,但是在我将程序部署到Linux中后,却出现生成的图片中中文全部乱码(显示成一个个的方框)。
一开始我是怀疑字体编码可能有冲突,通过System.getProperty("file.encoding")查看我本机的编码是GBK,而我服务器(centos7)上的编码是UTF-8。因此,我在生成图片时修改了系统编码,但不管用。
后来在不断google中看有的网友提到“字体”,因为Centos中没有中文字体,所以才造成上图中的一个个方框(一想也对,乱码的话应该是一对不规则的符号,不能是一个个方框)。
找到方法就去干!
查看服务器字体列表
[root@iZ2zez5rp1bmsZ share]# cd fc-list
bash: cd: fc-list: No such file or directory
悲哀,连字体库都没有
安装字体库
# 先安装fontconfig,用fontconfig来安装字体库
[root@iZ2zebjvdi1bmsZ share]# yum -y install fontconfig
Loaded plugins: fastestmirror
...
Installed:
fontconfig.x86_64 0:2.10.95-10.el7
Dependency Installed:
fontpackages-filesystem.noarch 0:1.44-8.el7
Complete!
fontconfig安装成功后在/usr/share目录中就会看到fonts和fontconfig两个目录(没装fontconfig之前是没有这两个目录的)
接下来就可以添加字体库了
添加字体
添加字体之前需要先下载相应的字体文件,博主用的是simsun.ttf(宋体)字体库,可以直接点击下载:下载simsun.zip
当然也可以去windows系统下的C:/windows/fonts目录下寻找合适的字体
字体文件准备好后,下边就正式开发操作
首先在/usr/share/fonts/目录下创建目录(名称随意)
mkdir chinese
然后将上方提供的
zip包中的两个文件全部解压并放到新建的目录(chinese)中,
然后修改chinese目录的权限
chmod -R 755 /usr/share/fonts/chinese
接下来需要安装ttmkfdir,这个命令的作用是搜索目录中所有的字体信息,汇总生成fonts.scale文件。
[root@iZ2zebjvditp1bmsZ fonts]# yum -y install ttmkfdir
Loaded plugins: fastestmirror
...
Installed:
ttmkfdir.x86_64 0:3.0.9-42.el7
Complete!
然后执行ttmkfdir命令:
[root@iZ2zz5rp1bmsZ fonts]# ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
最后修改字体配置文件
vi /etc/fonts/fonts.conf
如下添加配置
<dir>/usr/share/fonts/chinese</dir>
最后保存文件并执行fc-cache进行刷新字体缓存
OK,到此字体就安装完成,在看一下字体列表:
[root@iZ2zebrp1bmsZ fonts]# fc-list
/usr/share/fonts/chinese/simsun.ttc: SimSun\-PUA,宋体\-PUA:style=Regular
/usr/share/fonts/chinese/simsun.ttc: NSimSun,新宋体:style=Regular
/usr/share/fonts/chinese/simsun.ttf: SimSun,宋体:style=Regular
/usr/share/fonts/chinese/simsun.ttc: SimSun,宋体:style=Regular
重新测试生成文件
参考资料
Java 的系统属性 sun.jnu.encoding 和 file.encoding 的区别
- 本文标签: Linux
- 本文链接: https://zhyd.me/article/66
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权