java显示乱码 [Java] 部分乱码问题
[Java] 部分乱码问题
前些日子 QQ群里面的某个小朋友在学习文件的读写 发现一个乱码的问题
文件内容如下
运行结果如下
代码如下
观察其运行结果 部分的乱码 部分正常 不像是一般编码的错误 再仔细观察其代码 发现数组分配的是 个字节 猜测其代码可能在临界处拆分了某些汉字 于是让小朋友改成 运行后一切正常
以上只是一个小小的插曲 只是没想到自己也会在类似问题上中招
自己一直有些小想法 把一些繁琐网站操作根据日常的工作流程来程序化 想了很久 去年就开始策划 直到前两天才真正动手
代码很简单 只是普通的client使用 做些专属的爬虫
万万没想到的是 运行结果却出现了乱码 而且还是部分的乱码 网上也搜索过 类似的问题 多人都遇到 只是再也没有见到过有能够解决问题的答案
乱码的形式是这样的
直接访问网站 看到的内容是 <td>编号 </td> 但是通过代码回来的结果是 <td>编?</td>
代码如下
<SPAN > </SPAN>HttpGet get = new HttpGet(url);
HttpResponse response = (get);
HttpEntity entity = response getEntity();
![java显示乱码 [Java] 部分乱码问题](http://img.zhputi.com/uploads/a04a/a04a77b2a46a2d877da3761e556e71bd26141.jpg)
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 + rn );
}
br close();
System out println(new String(sb toString() getBytes( GBK ) UTF ));
}
怀疑过GBK没有包含网页所有的字符编码 胡思乱想过需要反复多次解码 折腾了 个小时 百思不得其解
于是停下来 再思考可能出现错误的地方 sb的值由append方法加入 来源是BufferedReader的readLiine方法 会不会这个readLine有问题?
干脆不要readLine 不要用BufferedReader 直接用InputSteam的read方法
代码如下
<SPAN > </SPAN>HttpPost post = new HttpPost(url);
HttpResponse response = (post);
HttpEntity entity = response getEntity();
StringBuffer sb = new StringBuffer();
if (entity != null) {
InputStream is = entity getContent();
byte[] bytes = new byte[ ];
int size = ;
while ((size = is read(bytes)) > ) {
String str = new String(bytes size UTF );
sb append(str);
}
is close();
}
return sb toString();
lishixinzhi/Article/program/Java/hx/201311/25743