关于HttpClient上传中文乱码的解决办法

iBit程序猿 2021年11月03日 2,892次浏览

使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单:

**第一步:**设置MultipartEntityBuilder的编码方式为UTF-8。

  1. //设置请求的编码格式
  2. builder.setCharset(Charset.forName(HTTP.UTF_8));

**第二步:**创建ContentType对象,指定UTF-8编码。

  1. ContentType contentType= ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);

**第三步:**使用 addPart + StringBody 代替 addTextBody。如:

  1. StringBody stringBody=new StringBody("中文乱码", contentType);
  2. builder.addPart("test",stringBody);

附上完整代码:

  1. ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);

  2. // 开启一个客户端 HTTP 请求
  3. HttpClient client=new DefaultHttpClient();

  4. //创建 HTTP POST 请求
  5. HttpPost post = new HttpPost(url);
  6. MultipartEntityBuilder builder = MultipartEntityBuilder.create();

  7. //设置请求的编码格式
  8. builder.setCharset(Charset.forName(HTTP.UTF_8));

  9. //设置浏览器兼容模式
  10. builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

  11. int count=0;
  12. for (File file : files) {
  13. builder.addBinaryBody("file" + count, file);
  14. count++;
  15. }

  16. //设置请求参数
  17. builder.addTextBody("method", params.get("method"));

  18. //设置请求参数
  19. builder.addTextBody("fileTypes", params.get("fileTypes"));
  20. StringBody stringBody=new StringBody("中文乱码",contentType);
  21. builder.addPart("test", stringBody);

  22. // 生成 HTTP POST 实体
  23. HttpEntity entity = builder.build();

  24. //设置请求参数
  25. post.setEntity(entity);

  26. // 发起请求 并返回请求的响应
  27. HttpResponse response = client.execute(post);
  28. if (response.getStatusLine().getStatusCode()==200) {
  29. return true;
  30. }
  31. return false;

**版权申明:**本文转载于【CSDN博主「CrazyCodeBoy」】关于HttpClient上传中文乱码的解决办法,仅用于学习,版权归作者所有,如有侵权烦请告知,我会立即删除并表示歉意,联系邮箱