HttpClient Post 方式模擬請求時常會遇到中文轉碼問題,這裏我總結一下本身遇到的幾種狀況和解決方案。html
一、請求網頁java
GetMethod getMethod = new GetMethod("http://www.baidu.com"); //(1)、這裏能夠設置本身想要的編碼格式 getMethod.getParams().setContentCharset("GB2312"); //(2)、對於get方法也能夠這樣設置 getMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GB2312"); //(3)、還能夠以下這樣設置 getMethod.addRequestHeader("Content-Type", "text/html; charset=UTF-8"); //(4)、固然一樣能夠直接設置 httpClient 對象的編碼格式 HttpClient httpClient = new HttpClient(); httpClient.getParams().setContentCharset("GB2312"); //使用流的方式讀取也能夠以下設置 InputStream in = getMethod.getResponseBodyAsStream(); //這裏的編碼規則要與上面的相對應 BufferedReader br = new BufferedReader(new InputStreamReader(in,"GB2312"));
二、請求方法ide
PostMethod PostMethod= new PostMethod("http://localhost:8080/ezid-cert-mobile/upload"); //(1)、一般能夠以下設置本身想要的編碼格式 postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8"); //(2)、也重載PostMethod的getRequestCharSet()方法 public class UTF8PostMethod extends PostMethod{ public UTF8PostMethod(String url){ super(url); } @Override public String getRequestCharSet() { return "UTF-8"; } } //(3)、若是是方法的參數出現亂碼問題,那麼你能夠以下設置參數 Charset utf8Charset = Charset.forName("UTF-8"); multipartContent.addPart("name", new StringBody(Info.getUserEntity().getName(), utf8Charset)); //(4)、若是你用的是Part [] parts={...}傳參方式的話能夠以下設置 StringPart name=new StringPart("name",certFormEntity.getPersonName(), "UTF-8");