HttpClient乱码问题

HttpClient是一个高效的远程访问工具。

虽然公司对其做了封装,但是底层代码还是一样的

1创建HttpClient实例,创建GetMethod,在GetMethod方法里创建待连接的地址

2调用Httpclient实例的execute方法来执行method实例

3读取response,释放连接

例如Get方法示例

package test;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class GetSample{
public static void main(String[] args) {
//构造HttpClient的实例
HttpClient httpClient = new HttpClient();
//创建GET方法的实例
GetMethod getMethod = new GetMethod("...");
//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter( HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler( ));
try {
//执行getMethod
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus. SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
}
//读取内容
byte[] responseBody = getMethod.getResponseBody();
//处理内容
System.out.println (new String(responseBody));
} catch (HttpException e) {
//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
//发生网络异常
e.printStackTrace();
} finally {
//释放连接
getMethod.releaseConnection();
}
}
}

那么ajax交互后台时,对于汉字乱码的解决办法,是用post方法(格式各种混乱的另说)

而对于httpclient与远程host交互时,对于带有汉字的参数,单纯的post就不能解决问题,而且httpclient会直接

抛出Exception,看了源码,在char[]=param.tocharArray();之后对每个字符进行url格式验证的时候,for循环到汉字,返回false,抛出异常 InvocationTargetException

解决办法是对于汉字用apache的URLEncoder.encode()去转换。

服务端为了保证能正确接收汉字,不要忘了把tomcat的server.xml在8080端口的connector标签中加入URIEncoding="UTF-8";


你可能感兴趣的:(httpclient,乱码)