事件背景:本人新人一枚,昨天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();...
加上这么一行好了...