完美解决Multipart EntityBuilder.addtextbody && http entity中文乱码

事件背景:本人新人一枚,昨天debug,公司要做个本地测试功能,测试服务器及APP抗压能力,写了一段代码调用网站接口,但坑爹的是我使用HttpPost请求模拟移动端向服务器请求数据,纯英文请求完美通过,只要一涉及到中文请求,就是各种问号(乱码),各种招都用了,这乱码就是改不掉,改了2天,总算搞定了。

网上关于解决MultipartEntityBuilder.addtextbody中文乱码的有很多,但我基本上试遍了,就是无法解决。

比如网上有说使用addPart+ StringBody代替addTextBody,解决中文乱码的

// builder.addTextBody(entry.getKey(), entry.getValue());

ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
StringBody stringBody = new StringBody(entry.getValue(),contentType);
builder.addPart(entry.getKey(), stringBody);

这个方法以前或许成立但现在就不行了,HTTP.PLAIN_TEXT_TYPE和HTTP.UTF_8两个属性过时,使用后无效果。

有这么用的

stringEntity.setContentEncoding("utf-8")  照样没用。

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(valuePairs, "utf-8");

 这个可以解决非MultipartEntityBuilder类型上传的乱码问题。

折腾2天,发现可以这么解决:
ContentType contentType = ContentType.create("text/plain",Charset.forName("UTF-8"));
HttpEntity caiJiEntity= MultipartEntityBuilder.create()
.addBinaryBody("file", new File("d://2.mp4"), ContentType.create("video/mp4"), "2.mp4")

.addBinaryBody("file1",new File("d:/1-120915094151.jpg"),

 ContentType.create("image/jpg"), "1-120915094151.jpg")

.addTextBody("mtxs", "三面立柱",contentType)

.build();...

加上这么一行好了...


你可能感兴趣的:(移动开发)