使用過HttpClient的人都知道可以通過addTextBody方法來添加要上傳的文本信息,但是,如果要上傳中文的話,或還有中文名稱的文件會出現(xiàn)亂碼的問題,解決辦法其實很簡單:
第一步:設(shè)置MultipartEntityBuilder的編碼方式為UTF-8。
builder.setCharset(Charset.forName(HTTP.UTF_8));//設(shè)置請求的編碼格式
第二步:創(chuàng)建ContentType對象,指定UTF-8編碼。
ContentType contentType= ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
第三步:使用addPart+ StringBody代替addTextBody。如:
StringBody stringBody=new StringBody("中文亂碼",contentType);
builder.addPart("test",stringBody);
附上完整代碼:
ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
HttpClient client=new DefaultHttpClient();// 開啟一個客戶端 HTTP 請求
HttpPost post = new HttpPost(url);//創(chuàng)建 HTTP POST 請求
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName(HTTP.UTF_8));//設(shè)置請求的編碼格式
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//設(shè)置瀏覽器兼容模式
int count=0;
for (File file:files) {
// FileBody fileBody = new FileBody(file);//把文件轉(zhuǎn)換成流對象FileBody
// builder.addPart("file"+count, fileBody);
builder.addBinaryBody("file"+count, file);
count++;
}
builder.addTextBody("method", params.get("method"));//設(shè)置請求參數(shù)
builder.addTextBody("fileTypes", params.get("fileTypes"));//設(shè)置請求參數(shù)
StringBody stringBody=new StringBody("中文亂碼",contentType);
builder.addPart("test", stringBody);
HttpEntity entity = builder.build();// 生成 HTTP POST 實體
post.setEntity(entity);//設(shè)置請求參數(shù)
HttpResponse response = client.execute(post);// 發(fā)起請求 并返回請求的響應(yīng)
if (response.getStatusLine().getStatusCode()==200) {
return true;
}
return false;