今天在我们项目中做了一个功能,在线接口测试。是用httpClient调用的:
String url = getUrlByParam(argsMap, removeStrs);
methodBase = this.requestPostMethod(url, pairs);
HttpClient client = new HttpClient();
client.executeMethod(methodBase);
然后传递给接口的参数中含有乱码,调试后发现在页面传递给pairs的时候都是正确的,但是返回的methodBase却是乱码
于是上网搜了下有三种方式解决乱码问题:
第一种:client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
第二种:重写PostMethod接口
public static class UTF8PostMethod extends PostMethod{
public UTF8PostMethod(String url){
super(url);
}
@Override
public String getRequestCharSet() {
return "UTF-8";
}
}
然后再:
PostMethod method = new UTF8PostMethod(url);
method.setRequestBody(pairs);
return method;
第三种:
method.getParams().setContentCharset("UTF-8");
method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
结果我都试了,还是不行,可能我太悲剧了吧...然后继续搜,说什么httpclient3不支持中文,默认采用ISO8859-1,我一看源码原来就是.但是还是没有找到解决办法...
最好惹毛了...果断换版本,用httpClient4试下,但是代码的写法完全变了..只有重写了...
List<NameValuePair> params = this.getListParam(argsMap);
String url = getUrlByParam(argsMap, removeStrs);
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse httpResponse = httpclient.execute(httpPost);
String value = EntityUtils.toString(httpResponse.getEntity());
调试下...OH...居然成功了是中文了....