首頁 > 運維 > linux運維 > 主體

linux下java亂碼

angryTom
發布: 2019-11-07 09:18:26
原創
3205 人瀏覽過

linux下java亂碼

Java語言中產生亂碼的原因及解決方法

a)基於awt(swing)的圖形介面程式中文顯示亂碼 

基於awt(swing)的圖形介面程式中,一般會出現選單中的中文顯示亂碼,原因一般是JVM找不到用來顯示中文的字庫,JVM在原始的安裝下是沒有中文庫的,而linux的發行版本又各不相同,其字庫存放的路徑和名字又各不相同,所以JVM一般是找不到linux作業系統內帶的字庫,解決方法是讓JVM能找到linux作業系統內帶的字庫,如在Redflag 6.0下可以透過下面指令解決: 

mkdir /usr/java/jdk1.6.0/jre/lib/fonts/fallback 
ln -s /usr/share/fonts/chinese/TrueType/*.ttf /usr/java/jdk1.6.0/jre/lib/fonts/fallback
登入後複製

一般不需要修改JRE/lib/目錄下的字型設定檔(fontconfig.OS.Version.properties)。

b)基於B/S結構的JSP(Servlet)的系統用戶端瀏覽器中文顯示亂碼 

頁面中的中文顯示亂碼 

對於像HTML的靜態文件,其文件的字元集只要和文件中處所設定的一樣即可。

對於像JSP和Servlet動態文件由於需要經過編譯,在運行是由JVM解釋class文件而產生用戶端瀏覽器所需的HTML文件,如果產生中文亂碼,則一般是由編譯和運行過程中產生的。若用商用的發行版Linux和伺服器,一般只要將JSP或Servlet檔案儲存為UTF-8字元集,將中設定為UTF-8即可。如果還出現亂碼則可以透過以下方法解決: 

①如果伺服器是自主研發的,可以透過修改原始程式碼,指定JVM讀取檔案、寫入檔案以及產生用戶端瀏覽器所需的HTML檔案時,字串與二進位序列流轉換時的編碼方式,從而從根本上解決問題,增強伺服器的適應性,在MyWebServer 2.0中,我就採用了這種方法,代碼如下: 

new BufferedReader(new InputStreamReader(new FileInputStream(jspfile),”GBK”)); 
new PrintWriter(serfile,”GBK”); 
new PrintWriter(new OutputStreamWriter(os,”GBK”));
登入後複製

②當然也可以在伺服器的入口文件(即含有main子函數的文件)中修改JVM的「locale」設置,程式碼如下: 

Locale.setDefault(new Locale(“zh”,”CN”));
登入後複製

③當採用商用伺服器時,可以修改啟動伺服器的shell文件,在啟動伺服器前設定環境變數“export LC_ALL=zh_CN.UTF-8”,從而改變本控制台下預設的“locale”值。 

④當然也可以修改作業系統的「locale」設置,但由於修改作業系統的「locale」設定將會影響到其他應用程序,所以一般採用該方法。

採用上述方法的主要原因是,當JVM在首次啟動時,會將作業系統的“locale”設為JVM的預設“locale”,在作業系統沒有設定“locale”值時, JVM將會把JVM的缺省的“locale”設置為JVM的默認“locale”,當然也可以在運行應用程式時修改JVM的預設“locale”設置,在JVM進行字串與二進制序列流相互轉換時,如果指定了編碼方式,將以指定的編碼方式轉換,否則根據JVM的預設「locale」進行轉換。

結論 

Java語言在linux下中文顯示產生的亂碼,主要與JVM的字庫、作業系統的locale設定、JVM的預設locale設定、應用程式中的locale設定以及應用程式中直接指定的二進位序列流與字串轉換的字元集有關。是由於二進位序列流和字串相互轉換過程中所採用的字元編碼方式不同或JVM找不到所需的字庫所致,可以採取不同的方法去解決,具體採用哪種方法處理還要結合具體的應用環境。

推薦:【Linux影片教學

#

以上是linux下java亂碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!