标签:httpclient 微信素材 上传乱码 微信乱码 乱码
在开发微信第三方公众平台的时候,需要上传图片、语音等文件到微信服务器。当文件名存在中文时会出现乱码。网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各种方式,依然是乱码。
所有的文章在微信这个场景上都有两个大坑。HttpClient的上传代码,基本上都类似,我就不重复写了,直接贴一段他的代码:
-------------------------------------------------
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;
-------------------------------------------------
上面高亮的两个地方就是在微信素材上传时的两个大坑。
1、当遇到乱码时,第一错觉就是设置请求的编码格式,恰恰在微信上传时,如果设置这个编码,就会导致多媒体文件丢失,上传不成功。(具体原因不明)
2、设置浏览器兼容模式,这个好多文章说,设置成BOWSER_COMPATIBLE 就不会乱码了,问题就出现在这里,设置模式时,应该设置成HttpMultipartMode.RFC6532
这样才是真正的不会出现乱码。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:httpclient 微信素材 上传乱码 微信乱码 乱码
原文地址:http://blog.csdn.net/kookob/article/details/46914777