乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android中文亂碼徹底解決

       w_hf的圖書館 2011-08-03
      Android中文亂碼徹底解決

      以下是我研究的成果,希望對(duì)您有幫助:

      Java代碼 復(fù)制代碼 收藏代碼
      1. sb = new StringBuffer();
      2. HttpEntity entity = response.getEntity();
      3. InputStream is = entity.getContent();
      4. BufferedReader br = new BufferedReader(
      5. new InputStreamReader(is,"GB2312"));
      6. String data = "";
      7. while ((data = br.readLine()) != null) {
      8. sb.append(data);
      9. }
      10. String result = sb.toString();
      Java代碼 復(fù)制代碼 收藏代碼
      1. //下面的是多余的代碼,平臺(tái)會(huì)按照默認(rèn)編碼讀數(shù)據(jù),謝謝melode11和eleda指點(diǎn) result = new String(result.getBytes(),"UTF-8");

      我解釋一下,

      Java代碼 復(fù)制代碼 收藏代碼
      1. BufferedReader br = new BufferedReader(
      2. new InputStreamReader(is,"GB2312"));


      是讀取要改編碼的源,源的格式是GB2312的,安源格式讀進(jìn)來,然后再對(duì)源碼轉(zhuǎn)換成想要的編碼就行

      分享到:
      評(píng)論
      12 樓 vvvpig 2010-09-18 引用
      還是萬惡的java編碼問題啊
      11 樓 zjjgogogo 2010-09-07 引用
      樓主,感謝?。?/div>
      10 樓 bashenmail 2009-11-23 引用
      melode11 寫道
      melode11 寫道
      bashenmail 寫道
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      Java代碼 復(fù)制代碼 收藏代碼
      1. result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")
      有什么不同嗎?還請(qǐng)您賜教

      厄,如果對(duì)字符編碼沒概念的話,解釋起來很麻煩。
      result.getBytes() 是 new String(byte[]) 的逆過程。
      前面那個(gè)是 String->byte[] ,后面那個(gè)是 byte[] -> String.
      在java運(yùn)行時(shí)的時(shí)候,String與String是沒有區(qū)別的都是以2字節(jié)的unicode的形式存在內(nèi)存中,所謂編碼,是針對(duì)把String轉(zhuǎn)換成 byte[]而言的。比如我可以把 "abc" 通過 utf-8轉(zhuǎn)換成了一串?dāng)?shù)據(jù) A ,也可以通過gb2312轉(zhuǎn)換成另一串?dāng)?shù)據(jù) B,這個(gè)過程就是 String.getBytes(),比如 "abc".getBytes("utf-8")得到A , "abc".getBytes("gb2312")得到B。如果是"abc".getBytes(),就不知道用的什么編碼了,這和平臺(tái)相關(guān)。
      那如何從A串或者 B串重新得到String呢,那就是 new String(A,"utf-8") 或者 new String(B,"gb2312")。因?yàn)锳是從utf-8轉(zhuǎn)換得到的,所以用utf-8轉(zhuǎn)回String ,如果new String(A,"gb2312"), 那么其中的中文就是亂碼。
      當(dāng)然gbk和utf-8的有小部分編碼集合是一樣的,所以英文字符,一般不管怎么轉(zhuǎn)都可以歪打正著。

      另外,因?yàn)榫W(wǎng)絡(luò)傳輸肯定是用byte[]的,不可能直接把String對(duì)象給傳過來,所以server想把某個(gè)字符串傳給client之前,需要將他轉(zhuǎn)成byte[] , 這中間就用了server指定的一種編碼,client在收到這個(gè) byte[]之后,就必須要采用和server相同的編碼,把byte[]重新轉(zhuǎn)換為String。這就是InputStreamReader需要指定一個(gè)編碼的原因。
      InputStreamReader作用就是在通過inputStream讀到byte[]的同時(shí),將byte[]用指定的編碼,轉(zhuǎn)換為 char[],也就是實(shí)際上的String.
      說了一大堆,不知道這表達(dá)的你能不能明白



      我明白您的意思了
      Java代碼 復(fù)制代碼 收藏代碼
      1. result = new String(result.getBytes(),"UTF-8");
      這段代碼是確實(shí)有問題,我在調(diào)試的時(shí)候也感覺到了這個(gè)問題,就是沒弄明白其中機(jī)制。非常感謝melode11詳細(xì)講解,向您致敬!高手!
      這句話確實(shí)是多余的,按照您的意思client已經(jīng)按照默認(rèn)編碼進(jìn)行轉(zhuǎn)換了。再次感謝melode11以后請(qǐng)多多關(guān)照。
      9 樓 melode11 2009-11-22 引用
      melode11 寫道
      bashenmail 寫道
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      Java代碼 復(fù)制代碼 收藏代碼
      1. result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")
      有什么不同嗎?還請(qǐng)您賜教

      厄,如果對(duì)字符編碼沒概念的話,解釋起來很麻煩。
      result.getBytes() 是 new String(byte[]) 的逆過程。
      前面那個(gè)是 String->byte[] ,后面那個(gè)是 byte[] -> String.
      在java運(yùn)行時(shí)的時(shí)候,String與String是沒有區(qū)別的都是以2字節(jié)的unicode的形式存在內(nèi)存中,所謂編碼,是針對(duì)把String轉(zhuǎn)換成 byte[]而言的。比如我可以把 "abc" 通過 utf-8轉(zhuǎn)換成了一串?dāng)?shù)據(jù) A ,也可以通過gb2312轉(zhuǎn)換成另一串?dāng)?shù)據(jù) B,這個(gè)過程就是 String.getBytes(),比如 "abc".getBytes("utf-8")得到A , "abc".getBytes("gb2312")得到B。如果是"abc".getBytes(),就不知道用的什么編碼了,這和平臺(tái)相關(guān)。
      那如何從A串或者 B串重新得到String呢,那就是 new String(A,"utf-8") 或者 new String(B,"gb2312")。因?yàn)锳是從utf-8轉(zhuǎn)換得到的,所以用utf-8轉(zhuǎn)回String ,如果new String(A,"gb2312"), 那么其中的中文就是亂碼。
      當(dāng)然gbk和utf-8的有小部分編碼集合是一樣的,所以英文字符,一般不管怎么轉(zhuǎn)都可以歪打正著。

      另外,因?yàn)榫W(wǎng)絡(luò)傳輸肯定是用byte[]的,不可能直接把String對(duì)象給傳過來,所以server想把某個(gè)字符串傳給client之前,需要將他轉(zhuǎn)成byte[] , 這中間就用了server指定的一種編碼,client在收到這個(gè) byte[]之后,就必須要采用和server相同的編碼,把byte[]重新轉(zhuǎn)換為String。這就是InputStreamReader需要指定一個(gè)編碼的原因。
      InputStreamReader作用就是在通過inputStream讀到byte[]的同時(shí),將byte[]用指定的編碼,轉(zhuǎn)換為 char[],也就是實(shí)際上的String.
      說了一大堆,不知道這表達(dá)的你能不能明白
      8 樓 melode11 2009-11-22 引用
      bashenmail 寫道
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      Java代碼 復(fù)制代碼 收藏代碼
      1. result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")
      有什么不同嗎?還請(qǐng)您賜教

      厄,如果對(duì)字符編碼沒概念的話,解釋起來很麻煩。
      result.getBytes() 是 new String(byte[]) 的逆過程。
      前面那個(gè)是 String->byte[] ,后面那個(gè)是 byte[] -> String.
      在java運(yùn)行時(shí)的時(shí)候,String與String是沒有區(qū)別的都是以2字節(jié)的unicode的形式存在內(nèi)存中,所謂編碼,是針對(duì)把String轉(zhuǎn)換成 byte[]而言的。比如我可以把 "abc" 通過 utf-8轉(zhuǎn)換成了一串?dāng)?shù)據(jù) A ,也可以通過gb2312轉(zhuǎn)換成另一串?dāng)?shù)據(jù) B,這個(gè)過程就是 String.getBytes(),比如 "abc".getBytes("utf-8")得到A , "abc".getBytes("gb2312")得到B。如果是"abc".getBytes(),就不知道用的什么編碼了,這和平臺(tái)相關(guān)。
      那如何從A串或者 B串重新得到String呢,那就是 new String(A,"utf-8") 或者 new String(B,"gb2312")。因?yàn)锳是從utf-8轉(zhuǎn)換得到的,所以用utf-8轉(zhuǎn)回String ,如果new String(A,"gb2312"), 那么其中的中文就是亂碼。
      當(dāng)然gbk和utf-8的有小部分編碼集合是一樣的,所以英文字符,一般不管怎么轉(zhuǎn)都可以歪打正著。
      7 樓 bashenmail 2009-11-21 引用
      eleda 寫道
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      嗯,這段的確有問題!
      如果系統(tǒng)的默認(rèn)編碼是utf-8還好。
      如果不是的話,result = new String(result.getBytes(),"UTF-8"); 這句就是亂碼的源泉!


      您說的對(duì),我是把GB2312轉(zhuǎn)換成UTF-8的,要不也不會(huì)出現(xiàn)亂碼,可能是我表達(dá)不清
      6 樓 bashenmail 2009-11-21 引用
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      Java代碼 復(fù)制代碼 收藏代碼
      1. result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")
      有什么不同嗎?還請(qǐng)您賜教
      5 樓 eleda 2009-11-18 引用
      melode11 寫道
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。

      嗯,這段的確有問題!
      如果系統(tǒng)的默認(rèn)編碼是utf-8還好。
      如果不是的話,result = new String(result.getBytes(),"UTF-8"); 這句就是亂碼的源泉!
      4 樓 melode11 2009-11-17 引用
      result = new String(result.getBytes(),"UTF-8"); 這句莫名其妙的。
      如果源真的是GB2312,那么InputStreamReader讀入的已經(jīng)是正確的值了。
      如果想要把result按utf-8編碼存到某文件, 那么 result.getBytes("utf-8")得到字節(jié)數(shù)組,再寫入 outputStream才是對(duì)的。
      3 樓 bashenmail 2009-11-16 引用
      changsir 寫道
      收藏,仔細(xì)研究。謝謝樓主分享!

      不敢當(dāng),也許會(huì)有更好的辦法呢
      2 樓 changsir 2009-11-16 引用
      收藏,仔細(xì)研究。謝謝樓主分享!
      1 樓 syluke 2009-11-03 引用
      多謝分享!你的代碼解決了我的問題。受教了。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多