linux伺服器上生成圖片漢字亂碼

最近公司開發一個專案,使用的是linux 環境伺服器。使用javaweb生成一個圖片檔案,結果發現中文顯示都是如圖所示的亂碼小方格。

linux伺服器上生成圖片漢字亂碼

正常的這句話是“我愛我的祖國天安門”。

先檢查了資料傳輸的問題,在伺服器上可以打印出來漢字,透過xshall連線發現新建檔案設定成中文名稱也沒有問題。不知道為啥是豎著的。。。。

linux伺服器上生成圖片漢字亂碼

可以寫個小程式在伺服器上執行下,檢視下伺服器目前支援的字符集,執行結果如圖所示:

linux伺服器上生成圖片漢字亂碼

程式的寫法很簡單,可以在github上下載,地址是:git@github。com:quanyecha1989/DailyCode。git

然後我們需要在linux伺服器上新增上相應的字符集即可。就是那種各種以*。ttf*。ttc結尾的東西。Windows上是在C:\Windows\Fonts這個目錄下。我們為了方便可以直接用ftp把Windows這個資料夾下的檔案都上傳到linux伺服器上的usr/share/fonts資料夾下。在上傳之前我們可以看到linux伺服器的這個資料夾下面東西不是很多

linux伺服器上生成圖片漢字亂碼

其他的檔案是我測試用的,所以刪掉了,我的伺服器下面是隻有一個lyx這個檔案,進入這個檔案可以看到裡面是相應的字符集。

linux伺服器上生成圖片漢字亂碼

當然我們也可以建立一個資料夾叫chinese然後把Windows上的字型集傳上來。

linux伺服器上生成圖片漢字亂碼

然後在執行測試程式,可以先看下現在系統支援的字型:

linux伺服器上生成圖片漢字亂碼

其他的很多我也不清楚,有大神可以都給解釋一下,這時候在重新生成圖片的話就變得正常了。

linux伺服器上生成圖片漢字亂碼

已經變得正常了。到此基本上就完成了,剩下的可能還需要設定tomcat或者docker裡面的字型集的問題。都是一個一個的大坑啊。剛開始的時候沒有想到直接寫個小程式在伺服器上測試,不然的話會更容易定位到這個問題。還有網上有很多需要linux安裝各種東西的可能也可以吧,我選擇了個更容易的,不需要再伺服器上裝外的東西。

到這裡並沒有結束,因為java的安裝包裡面也有一個fonts資料夾,路徑是/usr/java/jdk1。8。0_181-amd64/jre/lib/fonts。在這個資料夾裡面我們也可以看出來是沒有中文字符集的,那麼如果我們僅僅把字符集加到這個裡面,而linux系統裡面的fonts裡面不在新增這些字符集,我們還能輸出正確麼?

linux伺服器上生成圖片漢字亂碼

首先刪除了usr/share/fonts裡面的新增的chinese資料夾,然後重新生成漢字圖片,發現變回去方格狀態了。

然後在這個資料夾下面新增一個chinese資料夾,並且把字型集匯入。

linux伺服器上生成圖片漢字亂碼

然後在執行測試程式,看下會生成什麼樣子的圖片

linux伺服器上生成圖片漢字亂碼

還是亂碼,證明jre裡面的字型集並沒有起作用。如果使用了docker容器開發的話,還會有一個坑,我們下次講解。