前言:因本次使用的是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目錄下重啓應用即可。(可有可無))