Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 通信中的中文亂碼問題

android 通信中的中文亂碼問題

編輯:關於Android編程

1.要解決中文亂碼問題,首先得了解什麼是字符編碼

計算機要處理各種字符,就需要將字符和二進制內碼對應起來,這種對應關系就是字符編碼。要制定字符編碼首先要確定字符集,並將

字符集內的字符排序,然後和二進制數字對應起來,根據字符集內字符的多少,確定幾個字節來編碼。

2.常用的字符編碼

ASCII 編碼是目前計算機中常用的最廣泛地 字符集及其編碼。ISO-8859-1可以表示的是西歐語言,看起來很單一,但是由於是單字節編碼,與計算機最基礎的表示單位一致,所以在很多時候,仍舊使用ISO-8859-1編碼來表示,而且在很多協議上默認使用這種編碼。Unicode編碼(統一碼),通常所說的UTF-8就是Unicode編碼的實現方式。GB2312字集是簡體字集;BIG5字集是台灣繁體字集;GBK字集是簡繁字集;GB18030 是國家制定的一個強制性大字集標准;Linux系統默認的使用的是ISO-8859-1編碼,。現在的PC平台必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。
3.網絡傳輸產生中文亂碼原因

網絡通信中,產生亂碼的原因主要是通信過程中使用了不同的編碼方式:服務器中的編碼方式,傳輸過程中的編碼方式,傳輸到達終端設備的編碼方式。因此在傳輸過程中就需要至少兩次編碼轉換:首先從服務器編碼轉為網絡編碼,再從網絡編碼轉為終端設備編碼。在轉換的過程中出現任何情況都可能出現編碼混亂。

4.處理中文亂碼問題常用兩種方式解決

(1)由於大部分終端設備都支持Unicode字符集,所以在連接網頁時,我們希望網頁數據在網絡傳輸時使用UTF-8方式傳輸,我們就可以將UTF-8轉化為Unicode字符集。下面我們將通信過程中得到的流轉化為字節,然後再將字節按GB2312 的方式進行轉換得到字符串。

InputStream is = conn.getInputStream();

BufferedInputStream bis = new BufferedInputStream(is);

byte bytearray[] = new byte[1024];

int current= -1;

int i=0;

while((current=bis.read())!=-1) {

bytearray[i] =(byte) current;

i++;

}

resultData = new String (bytearray,"GB2312");//網絡中以字節想形式默認為UTF-8進行編碼,以GB2312顯示到終端


通過上面的轉換,“resultData”字符串便可以顯示中文效果了。
(2)另一種方式是書記在傳遞的過程中使用ISO-8859-1字符集,這樣就是直接使用了ASCII編碼方式,當然在傳遞到終端設備時,需要將其數據反轉才能夠正常的顯示。下面我們將一個字符串按ISO-8859-1字符集進行轉換為gbk,代碼如下:

public static String formatStr(String str){

if(str==null || str.length()==0){

return "";

}

try{

return new String (str.getBytes("ISO-8859-1"),"gbk"); //先在網絡中以ISO-8859-1進行編碼,再以gbk輸出到終端

}

}


總結:歸根結底,解決中文亂碼只需要兩個步驟:

·使用getBytes("編碼方式");來對漢字進行重編碼,得到它的字節數組。

·再使用new String (Bytes[],"解碼方式");來對字節數組進行相應的解碼。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved