前言:因本次使用的是java项目。但是理论上在其他项目(python、php等)上也可以解决掉。
一、环境
1、在本地测试好的java系统,打包放至linux系统上。启动,登陆时,却发现验证码出现乱码。
乱码不尽相同,大家所遇到的乱码长得可能千差万别,但万变不离其宗:乱码,不可读,不可用,也看不懂。
二、代码
1、本次使用的是Producer接口。
private Producer producer;
String capText = producer.createText();
BufferedImage bi = producer.createImage(capText);
2、但是使用Graphics2D 也是可以使用此方法解决的。
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
Font font = new Font("宋体",Font.PLAIN,20);
Graphics2D g = bi.createGraphics()
三、解决方法(重点!)
1、在linux环境下,找到/usr/share/fonts/lyx/msam10.ttf,删掉这个msam10.ttf文件。
2、在自己的window环境下,找到C:\Windows\Fonts\Times New Roman下的4个ttf文件,上传到linux环境下/usr/share/fonts/lyx/这个目录下。
3、重启应用即可解决验证码乱码问题。
四、原因分析
1、因为是一台全新的linux系统,所以有些字体是缺失的,导致乱码的直接原因。(因为linux默认使用的字体是msam10.ttf)
2、在linux上输入fc-list,会发现,将4个ttf字体放入前后对比(可以看到linux系统字体明显多了):
五、复制4个ttf文件可能遇到的问题
1、没有权限,不让复制。
解决方法:sudo chmod 777 lyx 给这个文件夹赋权限即可。
六、解决之后上图一张
七、至此应该没有什么问题了。《finish》
(也可以查看一下自己的Java项目使用的是什么字体,将对应的字体放在fonts/lyx目录下重启应用即可。(可有可无))