关于在HTTPclient抓取页面过程中,这些是自己遇到的一些乱码解决问题方案,现在进行整理,给出部分乱码解决方案

① 第一种

          List<NameValuePair> nvps = new ArrayList<NameValuePair>();

            nvps.add(new BasicNameValuePair("xxx", "xxx"));
            nvps.add(new BasicNameValuePair("xxx", "xxx"));
            nvps.add(new BasicNameValuePair("xxx", "xxx"));
            nvps.add(new BasicNameValuePair("xxx", "xxx"));
            post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
            HttpResponse response = client.execute(post);
        
            HttpEntity entity = response.getEntity();

            String responseHtml = EntityUtils.toString(entity, "utf-8");

②第二种

post乱码解决方案如下

凡是用到postMethod的时候PostMethod使用如下的重载函数:

    public static class UTF8PostMethod extends PostMethod{
        public UTF8PostMethod(String url){
            super(url);
        }
        @Override
        public String getRequestCharSet() {
            //return super.getRequestCharSet();
            return "UTF-8";
        }
    }

即可解决问题

get乱码解决方案如下:

1. 对中文参数使用URLEncoder.encode(src);来编码;
2. 设置GetMethod编码格式为utf-8:get_method.addRequestHeader("Content-type" , "text/html; charset=utf-8");
3. 返回响应消息使用utf-8或gb2312编码:String response=new String(get_method.getResponseBodyAsString().getBytes("gb2312"));

③第三种

自己在发现无论怎么样转化,都是乱码,于是慢慢的试试,发现问题出现在这行上面:
getMethod.setRequestHeader("Accept-Encoding","gzip, deflate");  

<span style="font-size:14px;color:#FF0000;">getMethod.setRequestHeader("Accept-Encoding","gzip, deflate");</span>

去掉这行,一切就正常了!(为什么会出现这种情况的呢?于是我查找了一下资料,下面是我的引用...)

为什么用浏览器可以正常浏览,而我用程序模仿就不行呢?

答案在这里:

引用
gzip是一种数据格式
默认且目前仅使用deflate算法压缩data部分,此法用于压缩传输
如果服务器支持Gzip,那么客户端必须要IE5.5以上!

数据返回给客户端时候已经被gzip压缩了,只是IE可以自动解压,而你的程序里面没有自动解压而已……

同样道理,你可以弄个解压算法来把乱码的数据解压,即可得到正常的HTML返回结果。


IE和我们的代码使用的HTTP头里面都有这条内容,将这条内容删掉我得到了正确的结果。原因如下:

这条信息代表本地可以接收压缩格式的数据,而服务器在处理时就将大文件压缩再发回客户端,IE在接收完成后在本地对这个文件又进行了解压操作,所以文件内容是正确的。而在我们的代码里是将这些内容直接存入文件,不存在解压缩的过程,所以Size变小,内容也不一样。

细心的人可以发现在,IE在Down某一个比较大一点的东西时,Down的过程中显示的大小,比Down下来实际大小要小,这就是因为在接收的过程中接收的是压缩文件,而存到本地后的文件当然要大一些了哈~~









Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐