Linux環境下BufferedImage Graphics drawString 亂碼解決方法
今天專案在linux伺服器上面,登入頁的圖片驗證碼顯示亂碼,本地windows環境正常。
g.setFont(new Font("Candara", Font.BOLD, 24));
寫文字進入圖片之前必須設定字型
BufferedImage在記憶體建立的影象呼叫的是伺服器端的字型,所以在生成圖片時,
g.drawString("文字內容", 8, 24);
如果伺服器端找不到對應的中文字型,那麼它就識別不了,最後寫入圖片的中文就變成了亂碼、方框、問號等等了。
解決辦法:
第一種方法,新增系統中文字型(宋體):
[email protected]:~# cd /usr/share/fonts
[email protected]:/usr/share/fonts# cp /home/dragon/Desktop/simsun.ttc winFonts
[email protected]:/usr/share/fonts# cd winFonts
[email protected]:/usr/share/fonts/winFonts# mkfontdir
[email protected]:/usr/share/fonts/winFonts# mkfontscale
第二種方法,新增jre中文字型(宋體):
[email protected]:/usr/lib/jvm/java-6-sun/jre/lib/fonts# cp /home/dragon/Desktop/simsun.ttc .
windows下直接複製字型檔案到jre字型目錄:
C:\Program Files\Java\jdk1.8.0_161\jre\lib\fonts
修改完必須重啟伺服器才有效。