java中含中文字符串的編碼和解碼問題。

1、在java開發中經常被文字亂碼的問題困擾。下面全面解釋下字符串的編碼和解碼。

如 String str = "中國"

編碼:byte[] bts = str.getBytes("編碼方式");//常用編碼方式 gbk、utf-8、gb2312、iso-8859-1等等。

解碼:String b = new String(bts,"解碼方式");//解碼方式對應常用編碼方式。


2、常識:正常(正常顯示的字符串無亂碼)解碼後的字符串對象可以用任意方式編碼。但解碼要正常顯示,必須用對應的編碼方式解碼。(對於中文要保證正常顯示必須採用中文編碼/解碼方式)

如 String str = "中國";//這個就是正常顯示的字符串

以下任意方式(中文)編碼/解碼-----------

String b1 = new String(str.getBytes("gbk"),"gbk");

String b2 = new String(str.getBytes("utf-8"),"utf-8");

String b3 = new String(str.getBytes("gb2312"),"gb2312");

以上三種方式的字符串對象都是採用中文方式編碼/解碼,所以都會是正常並無亂碼。


3、當沒采用對應方式解碼時(也就是所謂的亂碼)怎麼轉成正常顯示而無亂碼。

如 String str = "中國";

String b1 =  new String(str.getBytes("gbk"),"gbk");//這裏的b1就是採用的gbk的方式解碼的 ::::b1不會亂碼的

String b2 = new String(b1.getBytes(),"utf-8");//這裏對b1編碼後的字節數組重新用utf-8而沒有用對應的gbk方式解碼。:::::b2將會是亂碼的

以下開始將亂碼轉成正常顯示

String b3 = new String(b2.getBytes("utf-8"),"gbk")//這裏編碼方式(utf-8)必須用上述b2的解碼方式,而解碼方式(gbk)必須用b1的解碼方式。因爲是b2把正常顯示的b1解碼成亂碼。:::::::b3不會是亂碼的。


在實際應用中出現的亂碼,都是這個原因造成的,亂碼不是不可逆的,上述步驟就是一個逆轉的過程。

4常見應用舉例。

在web開發中,tomcat對於傳輸的字符串都是採用iso-8859-1編碼/解碼方式。而客戶端(瀏覽器端對於中文都是用gbk或utf-8中文編碼/解碼方式),所以傳到後臺都會是亂碼的。容器一般都是有處理的,所以中文能正常顯示和存儲。但有些情況也是會出現亂碼的,解決方式如下

String b = new String(str.getBytes("iso-8859-1","客戶端的編碼/解碼方式")//中文解碼方式一般用的是utf-8或者gbk。

如:

 String b1 = new String(str.getBytes("iso-8859-1","utf-8");



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章