HttpClient通过POST方式访问webservice服务,参数中的中文乱码

确定传输的参数的字符串是以utf-8形式,接收的返回字符流也转为了utf-8,但是返回的字符串中包含的传过去的参数中的中文却是???的形式

最后确定应该是传输过程中的编码问题,也就是httpClient的编码,在网上查发现有几种方式

1. GET

  • GETMethod的setQueryString方法设置QueryString
    第一种方式
public void setQueryString(NameValuePair[] params){  
    queryString = EncodingUtil.formUrlEncode(params, "UTF-8");  
} 

第二种方式

public void setQueryString(String queryString){  
     this.queryString = queryString;  
}

其中queryString是以某种charset编码后的字符串

  • GETMethod的构造函数,直接设置URLEncode之后的uri
public GetMethod(String uri) {  
    super(uri);  
    LOG.trace("enter GetMethod(String)");  
    setFollowRedirects(true);  
} 

2.POST

  • 在POST请求中的Header中设置Content-Type
PostMethod method = new PostMethod();  
method.addRequestHeader("Content-Type","text/html;charset=UTF-8"); 
  • 设置HttpClientParam的ContentCharset
HttpClient httpClient = new HttpClient();  
HttpClientParam params = httpClient.getParams();  
params.setContentCharset("UTF-8"); 
  • 设置HttpMethodParams的ContentCharset
PostMethod method = new PostMethod();  
HttpMethodParams params = method.getParams();  
params.setContentCharset("UTF-8"); 

如果都没有设置的话默认的是ISO-8859-1

你可能感兴趣的:(HttpClient通过POST方式访问webservice服务,参数中的中文乱码)