HttpClient的HttpGet请求乱码问题解决


自动解析页面编码,并转换为相应编码的字符





public static String httpGet(String url) throws ClientProtocolException, IOException, URISyntaxException {
            HttpClient httpclient = new DefaultHttpClient();
            String result = "";
             try {
                   // 连接超时
                  httpclient.getParams().setParameter(
                              CoreConnectionPNames. CONNECTION_TIMEOUT, 5000);
                   // 读取超时
                  httpclient.getParams().setParameter(
                              CoreConnectionPNames. SO_TIMEOUT, 5000);

                   HttpGet hg = new HttpGet (url);
                   //模拟浏览器
                  hg.addHeader( "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"); 
                  String charset = "UTF-8"; 
                  hg.setURI( new java.net.URI(url)); 
                        HttpResponse response = httpclient.execute(hg); 
                        HttpEntity entity = response.getEntity(); 
                        if (entity != null) { 
                            charset = getContentCharSet(entity);
                               // 使用EntityUtils的toString方法,传递编码,默认编码是ISO-8859-1 
                            result = EntityUtils.toString(entity, charset); 
                      } 
      
            } finally {
                  httpclient.getConnectionManager().shutdown();
            }
             return result;
      }

     /**
     * 默认编码utf -8
     * Obtains character set of the entity, if known.
     * 
     * @param entity must not be null
     * @return the character set, or null if not found
     * @throws ParseException if header elements cannot be parsed
     * @throws IllegalArgumentException if entity is null
     */  
    public static String getContentCharSet(final HttpEntity entity) 
        throws ParseException { 
 
        if (entity == null) { 
            throw new IllegalArgumentException("HTTP entity may not be null"); 
        } 
        String charset = null; 
        if (entity.getContentType() != null) {  
            HeaderElement values[] = entity.getContentType().getElements(); 
            if (values.length > 0) { 
                NameValuePair param = values[0].getParameterByName("charset" ); 
                if (param != null) { 
                    charset = param.getValue(); 
                } 
            } 
        } 
       
        if(StringUtils.isEmpty(charset)){
            charset = "UTF-8";
        }
        return charset; 
    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值