標籤:
使用過HttpClient的人都知道可以通過addTextBody方法來添加要上傳的文本資訊,但是,如果要上傳中文的話,或還有中文名稱的檔案會出現亂碼的問題,解決辦法其實很簡單:
第一步:設定MultipartEntityBuilder的編碼方式為UTF-8。
builder.setCharset(Charset.forName(HTTP.UTF_8));//佈建要求的編碼格式
第二步:建立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);//建立 HTTP POST 請求 MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.setCharset(Charset.forName(HTTP.UTF_8));//佈建要求的編碼格式builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//設定瀏覽器安全色模式int count=0;for (File file:files) {// FileBody fileBody = new FileBody(file);//把檔案轉換成流對象FileBody// builder.addPart("file"+count, fileBody); builder.addBinaryBody("file"+count, file); count++;} builder.addTextBody("method", params.get("method"));//佈建要求參數builder.addTextBody("fileTypes", params.get("fileTypes"));//佈建要求參數StringBody stringBody=new StringBody("中文亂碼",contentType);builder.addPart("test", stringBody);HttpEntity entity = builder.build();// 產生 HTTP POST 實體 post.setEntity(entity);//佈建要求參數HttpResponse response = client.execute(post);// 發起請求 並返回請求的響應if (response.getStatusLine().getStatusCode()==200) { return true;}return false;
Android 關於HttpClient上傳中文亂碼的解決辦法