在java開發的時候總會遇到java中文亂碼的情況,漢字編碼怎樣才能正確的選擇以及如何正確處理漢字的編碼,接下來海浪通過自己的java經驗來告知大家應對Java中文亂碼的妙招。
第一,要想解決Java中文亂碼問題就有必要了解一下什麼是字符,字符集,編碼的概念。
字符:是文字與符號的總稱,包括文字、圖形符號、數學符號等。
字符集:就是一組抽象字符的集合。字符集常常和一種具體的語言文字對應起來,該文字中的所有字符或者大部分常用字符就構成了該文字的字符集,比如英文字符集。繁體漢字字符集、日文漢字字符集等等。
計算機要處理各種字符,就需要將字符和二進制內碼對應起來,這種對應關系就是字符編碼: 制定編碼首先要確定字符集,並將字符集內的字符排序,然後和二進制數字對應起來。根據字符集內字符的多少,會確定用幾個字節來編碼。
每種編碼都限定了一個明確的字符集合,叫做被編碼過的字符集(Coded Character Set),這是字符集的另外一個含義。通常所說的字符集大多是這個含義。
第二,要想解決Java中文亂碼問題也得了解一下我們常用的編碼方式:
ASCII編碼是目前計算機中用得最廣泛的字符集及其編碼。
ISO8859-1可以表示的是西歐語言。看起來很單一為什麼還在使用呢?,由於是單字節編碼,和計算機最基礎的表示單位一致,所以很多時候,仍舊使用ISO-8859-1編碼來表示。 而且在很多協議上,默認使用該編碼。
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。通常海浪所遇到過多UTF-8這是Unicode編碼的實現方式,請一定要加以區分。
GB2312字集是簡體字集;BIG5字集是台灣繁體字集;GBK字集是簡繁字集,包括了GB字集、BIG5字集和一些符號
GB18030是國家制定的一個強制性大字集標准,它的推出使漢字集有了一個統一的標准。
Linux系統默認使用的是ISO-8859-1編碼,Win32系統默認使用的是GB2312編碼。
第三,了解亂碼是怎麼產生的,如何解決Java中文亂碼?
字符在保存時的編碼格式如果和要顯示的編碼格式不一樣的話,就會出現亂碼問題。海浪在做開發的時候,提倡開發環境編碼一致。如頁面編碼,數據庫編碼等。
Java在運行期一律以Unicode來存儲字符,這樣有利的支持了多語言環境。海浪在開發過程中經常會用到文件讀取。Java讀文件的時候會用到系統默認的編碼來解碼文件。所以在用FileInputStream類讀取文件可以指定編碼讀取。
JSP頁面亂碼通常只要在頁面開始地方用下面代碼指定字符集編碼即可。如果還不行,那麼請用下面這句話來轉換 str=new String(str.getBytes("ISO-8859-1"),"頁面編碼方式");
Java在網絡傳輸中使用的編碼是"ISO-8859-1",故在輸出時需要進行轉化,如:
String str=new String(str.getBytes("開發環境編碼"),"ISO-8859-1");
經過網絡編碼後的中文,要正確顯示在頁面上必須要用類似於
Stirng str=new String(str.getBytes("ISO-8859-1"),"開發環境編碼");這樣的方式來解碼
第四,為了避免不必要的Java中文亂碼,我們首先要從源頭做起。
什麼意思呢?這就是說,我們在項目開發中,首先要讓我們開發環境統一編碼。比如海浪用的開發環境是Eclipse+Tomcat5.0+SQLServer 2005。Eclipse的項目屬性中可以設置項目的編碼,可以針對JSP頁面的設置統一的編碼。