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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容