您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java在linux下出現亂碼的原因和解決方法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
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的靜態文件,其文件的字符集只要和文件中<meta http-equiv=”Content-Type” content=”text/html; charset=…… “>處所設置的一樣即可。
對于像JSP和Servlet動態文件由于需要經過編譯,在運行是由JVM解釋class文件而產生用戶端瀏覽器所需的HTML文件,如果產生中文亂碼,則一般是由編譯和運行過程中產生的。如果用商用的發行版Linux和服務器,一般只要將JSP或Servlet文件保存為UTF-8字符集,將<meta http-equiv = “Content-Type” content=”text/html; charset=…… “>中設置為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找不到所需要的字庫所致,可以采取不同的方法去解決,具體采用哪種方法處理還要結合具體的應用環境。
關于Java在linux下出現亂碼的原因和解決方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。