linux下java亂碼

linux下java亂碼

java語言中產(chǎn)生亂碼的原因及解決方法

a)基于awt(swing)的圖形界面程序中文顯示亂碼?

基于awt(swing)的圖形界面程序中,一般會出現(xiàn)菜單中的中文顯示亂碼,其原因一般是JVM找不到用來顯示中文的字庫,JVM在原始的安裝下是沒有中文字庫的,而linux的發(fā)行版本又各不相同,其字庫存放的路徑和名字又各不相同,所以JVM一般是找不到linux操作系統(tǒng)內(nèi)帶的字庫,解決方法是讓JVM能找到linux操作系統(tǒng)內(nèi)帶的字庫,如在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結(jié)構(gòu)的JSP(Servlet)的系統(tǒng)用戶端瀏覽器中文顯示亂碼?

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

頁面中的中文顯示亂碼?

對于像HTML的靜態(tài)文件,其文件的字符集只要和文件中處所設(shè)置的一樣即可。?

對于像JSP和Servlet動態(tài)文件由于需要經(jīng)過編譯,在運(yùn)行是由JVM解釋class文件而產(chǎn)生用戶端瀏覽器所需的HTML文件,如果產(chǎn)生中文亂碼,則一般是由編譯和運(yùn)行過程中產(chǎn)生的。如果用商用的發(fā)行版Linux和服務(wù)器,一般只要將JSP或Servlet文件保存為UTF-8字符集,將中設(shè)置為UTF-8即可。如果還出現(xiàn)亂碼則可以通過以下方法解決:?

①如果服務(wù)器是自主研發(fā)的,可以通過修改源代碼,指定JVM讀文件、寫文件以及生成用戶端瀏覽器所需的HTML文件時,字符串與二進(jìn)制序列流轉(zhuǎn)換時的編碼方式,從而從根本上解決問題,增強(qiáng)服務(wù)器的適應(yīng)性,在MyWebServer 2.0中,我就采用了這種方法,代碼如下:?

new?BufferedReader(new?InputStreamReader(new?FileInputStream(jspfile),”GBK”));? new?PrintWriter(serfile,”GBK”);? new?PrintWriter(new?OutputStreamWriter(os,”GBK”));

②當(dāng)然也可以在服務(wù)器的入口文件(即含有main子函數(shù)的文件)中修改JVM的“l(fā)ocale”設(shè)置,代碼如下:?

Locale.setDefault(new?Locale(“zh”,”CN”));

③當(dāng)采用商用服務(wù)器時,可以修改啟動服務(wù)器的shell文件,在啟動服務(wù)器前設(shè)置環(huán)境變量“export LC_ALL=zh_CN.UTF-8”,從而改變本控制臺下默認(rèn)的“l(fā)ocale”值。?

④當(dāng)然也可以修改操作系統(tǒng)的“l(fā)ocale”設(shè)置,但由于修改操作系統(tǒng)的“l(fā)ocale”設(shè)置將會影響到其他應(yīng)用程序,所以一般采用該方法。?

采用上述方法的主要原因是,當(dāng)JVM在首次起動時,將會把操作系統(tǒng)的“l(fā)ocale”設(shè)置為JVM的默認(rèn)“l(fā)ocale”,在操作系統(tǒng)沒有設(shè)置“l(fā)ocale”值時,JVM將會把JVM的缺省的“l(fā)ocale”設(shè)置為JVM的默認(rèn)“l(fā)ocale”,當(dāng)然也可以在運(yùn)行應(yīng)用程序時修改JVM的默認(rèn)“l(fā)ocale”設(shè)置,在JVM進(jìn)行字符串與二進(jìn)制序列流相互轉(zhuǎn)換時,如果指定了編碼方式,將以指定的編碼方式轉(zhuǎn)換,否則根據(jù)JVM的默認(rèn)“l(fā)ocale”進(jìn)行轉(zhuǎn)換。?

結(jié)論?

Java語言在linux下中文顯示產(chǎn)生的亂碼,主要與JVM的字庫、操作系統(tǒng)的locale設(shè)置、JVM的默認(rèn)locale設(shè)置、應(yīng)用程序中的locale設(shè)置以及應(yīng)用程序中直接指定的二進(jìn)制序列流與字符串轉(zhuǎn)化的字符集有關(guān)。是由于二進(jìn)制序列流和字符串相互轉(zhuǎn)化過程中所采用的字符編碼方式不同或者JVM找不到所需要的字庫所致,可以采取不同的方法去解決,具體采用哪種方法處理還要結(jié)合具體的應(yīng)用環(huán)境。

推薦:【Linux視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享