熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

[Java] 部分亂碼問題

2013-11-23 18:47:29  來源: Java核心技術 

  前些日子QQ群裡面的某個小朋友在學習文件的讀寫發現一個亂碼的問題

  文件內容如下

  

  運行結果如下

  

  代碼如下

  

  觀察其運行結果部分的亂碼部分正常不像是一般編碼的錯誤再仔細觀察其代碼發現數組分配的是個字節猜測其代碼可能在臨界處拆分了某些漢字於是讓小朋友改成運行後一切正常

  以上只是一個小小的插曲只是沒想到自己也會在類似問題上中招

  自己一直有些小想法把一些繁瑣網站操作根據日常的工作流程來程序化想了很久去年就開始策劃直到前兩天才真正動手

  代碼很簡單只是普通的httpclient使用做些專屬的爬蟲

  萬萬沒想到的是運行結果卻出現了亂碼而且還是部分的亂碼網上也搜索過類似的問題多人都遇到只是再也沒有見到過有能夠解決問題的答案

  亂碼的形式是這樣的

  直接訪問網站看到的內容是<td>編號</td> 但是通過代碼回來的結果是 <td>編?</td> 

  代碼如下

  <SPAN >  </SPAN>HttpGet httpget = new HttpGet(url);

  HttpResponse response = (httpget);

  HttpEntity entity = responsegetEntity();

  if (entity != null) {

  BufferedReader br = new BufferedReader(new InputStreamReader(entitygetContent()));

  String s = ;

  StringBuffer sb = new StringBuffer();

  while ((s = brreadLine()) != null) {

  sbappend(s + \r\n);

  }

  brclose();

  Systemoutprintln(new String(sbtoString()getBytes(GBK)UTF));

  }

  懷疑過GBK沒有包含網頁所有的字符編碼胡思亂想過需要反復多次解碼折騰了個小時百思不得其解

  於是停下來再思考可能出現錯誤的地方sb的值由append方法加入來源是BufferedReader的readLiine方法會不會這個readLine有問題?

  干脆不要readLine不要用BufferedReader 直接用InputSteam的read方法

  代碼如下

  <SPAN >  </SPAN>HttpPost httppost = new HttpPost(url);

  HttpResponse response = (httppost);

  HttpEntity entity = responsegetEntity();

  StringBuffer sb = new StringBuffer();

  if (entity != null) {

  InputStream is = entitygetContent();

  byte[] bytes = new byte[];

  int size = ;

  while ((size = isread(bytes)) > ) {

  String str = new String(bytes size UTF);

  sbappend(str);

  }

  isclose();

  }

  return sbtoString();

  至此煩人的部分正常部分亂碼問題才真正搞定


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25743.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.