HttpClient 请求的中文乱码问题
相关类库:
commons-codec-1.3.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar
--给请求传递参数
HttpClient client = new HttpClient();
HttpMethod method= new PostMethod(url);
HttpMethodParams params = new HttpMethodParams();
params.setContentCharset("GB2312");
method.setParams(params);
方式一:
最简单的方式,直接输出页面,这里基本上不需要任何设置。
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=gb2312");
转自:http://871421448.iteye.com/blog/1546950