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.網絡傳輸產生中文亂碼原因
網絡通信中,產生亂碼的原因主要是通信過程中使用了不同的編碼方式:server中的編碼方式,傳輸過程中的編碼方式,傳輸到達終端設備的編碼方式。
因此在傳輸過程中就須要至少兩次編碼轉換:首先從server編碼轉為網絡編碼,再從網絡編碼轉為終端設備編碼。在轉換的過程中出現不論什么情況都可能出現編碼混亂。
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[],"解碼");解碼相應的字節數組。
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/yxwkf/p/4612497.html
總結
以上是生活随笔為你收集整理的android 中国通信乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript学习记录总结(四)—
- 下一篇: 算法笔记——整数划分1