HttpClient 处理中文乱码

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");

相关推荐