HttpClient请求中文乱码详解

HttpClient 请求的中文乱码问题
相关类库:
commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar

使用方法setContentCharset();
这里以GetMethod为例:
如果请求的页面编码为GB2312
其它部分略

GetMethod getMethod = new GetMethod("http://www.baidu.com");
//设置页面编码
getMethod.getParams().setContentCharset("GB2312");

基本上设置请求部分完成了
下面是对请求的页面读取的解析
最简单的方式是直接输出页面,这里基本上不需要任何设置。

System.out.println(getMethod.getResponseBodyAsString());

当然你也可以使用流方式读取

InputStream in = getMethod.getResponseBodyAsStream();
//这里的编码规则要与上面的相对应
BufferedReader br = new BufferedReader(new InputStreamReader(in,"GB2312"));
String tempbf;
StringBuffer html = new StringBuffer(100);
while ((tempbf = br.readLine()) != null) {
html.append(tempbf +"\n");
}
System.out.println(html.toString());

当然还可以使用这样的方式,因为默认是使用ISO-8859-1,无非就是多进行了几次转码

InputStream in = getMethod.getResponseBodyAsStream();
//这里使用8859-1读取
BufferedReader br = new BufferedReader(new InputStreamReader(in,"ISO-8859-1"));
String tempbf;
StringBuffer html = new StringBuffer(100);
while ((tempbf = br.readLine()) != null) {
html.append(tempbf +"\n");
}
//将8859-1再次转成GB2312
System.out.println(new String(html.toString().getBytes("ISO-8859-1"),"GB2312"));

我还是建议使用第一种方法,但我认为本质上是一致的
对于请求部分还可以通过如下几种方式进行设置

getMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GB2312");


getMethod.addRequestHeader("Content-Type", "text/html; charset=UTF-8");

这里我只是给予大家参考,实际上etContentCharset()就可以了,如果那个页面通过上述方法不能成功读取,也请指明。
如果大家有更好的方法 也请告知。


[img]http://www.shanhe114.com/logo.gif[/img]
[url=http://www.shanhe114.com]长春生活网[/url]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值