[Java]部分乱码问题

  前些日子,QQ群里面的某个小朋友在学习文件的读写,发现一个乱码的问题。

  文件内容如下:

  

  运行结果如下:

  

  代码如下:

  

  观察其运行结果,部分的乱码,部分正常,不像是一般编码的错误。再仔细观察其代码,发现数组分配的是10个字节,猜测其代码可能在临界处拆分了某些汉字,于是让小朋友改成12,运行后一切正常。

  以上只是一个小小的插曲,只是没想到自己也会在类似问题上中招。

  自己一直有些小想法,把一些繁琐网站操作根据日常的工作流程来程序化。想了很久,去年就开始策划,直到前两天才真正动手。

  代码很简单,只是普通的httpclient使用,做些专属的爬虫。

  万万没想到的是,运行结果却出现了乱码,而且还是部分的乱码。网上也搜索过,类似的问题,多人都遇到,只是再也没有见到过有能够解决问题的答案。

  乱码的形式是这样的:

  直接访问网站,看到的内容是“<td>编号:</td>” 但是通过代码回来的结果是 “<td>编?</td>” 。

  代码如下:

  <SPAN ></SPAN>HttpGet httpget = new HttpGet(url);HttpResponse response = (httpget);HttpEntity entity = response.getEntity();if (entity != null) {BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));String s = “”;StringBuffer sb = new StringBuffer(“”);while ((s = br.readLine()) != null) {sb.append(s + “\r\n”);}br.close();System.out.println(new String(sb.toString().getBytes(“GBK”),”UTF-8″));}

  怀疑过GBK没有包含网页所有的字符编码,胡思乱想过需要反复多次解码。折腾了1,2个小时,百思不得其解。

  于是停下来,再思考可能出现错误的地方,sb的值由append方法加入,来源是BufferedReader的readLiine方法,会不会这个readLine有问题?

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

  代码如下:

  <SPAN ></SPAN>HttpPost httppost = new HttpPost(url);HttpResponse response = (httppost);HttpEntity entity = response.getEntity();StringBuffer sb = new StringBuffer();if (entity != null) {InputStream is = entity.getContent();byte[] bytes = new byte[4096];int size = 0;while ((size = is.read(bytes)) > 0) {String str = new String(bytes, 0, size, “UTF-8”);sb.append(str);}is.close();}return sb.toString();

  至此,烦人的部分正常部分乱码问题才真正搞定。

  【警示】 以上代码片段仅为测试功能目的的示例,缺乏必要的异常处理。 如若在实际工程中引用,切记自行处理。

会得到最大的满足,因为它填补了你的空虚。

[Java]部分乱码问题

相关文章:

你感兴趣的文章:

标签云: