在开发微信第三方公众平台的时候,需要上传图片、语音等文件到微信服务器。当文件名存在中文时会出现乱码。网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各种方式,依然是乱码。

所有的文章在微信这个场景上都有两个大坑。
下面我copy下别人的代码,然后标注出来:
原文链接如下: http://blog.csdn.net/fengyuzhengfan/article/details/40792529

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
这样才是真正的不会出现乱码。

好了,把上面指出来的两个地方改一下,微信素材上传中文乱码问题解决了。有遇到同样情况的,可以试下。
然后有些代码还在用MultipartEntity这个弃用的类,建议改成新的MultipartEntityBuilder
简便写法:
HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532).addPart("media", bin).build();
不要设置编码,模式设置要注意
不要设置编码,模式设置要注意
不要设置编码,模式设置要注意
重要的话要重复三遍?

HttpClient上传文件到微信素材乱码问题解决相关推荐

  1. C# 使用HttpClient上传文件并附带其他参数的步骤

    HttpClient和MultipartFormDataContent(传送门)最低适用于.NET Framework 4.5版本 发送端代码 using (HttpClient client = n ...

  2. xshell用rz上传文件,彻底解决乱码

    1 安装 yum -y install lrzsz 2 问题 使用rz上传文件时,出现乱码,上传失败. 3 原因 文件中包含控制字符 4 解决方法 使用 rz -be -b:–binary 用bina ...

  3. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 参考文章: (1)springBoot上传文件时MultipartFile报空问题解决方法 (2)https://www.cn ...

  4. [转]httpclient 上传文件、下载文件

    用httpclient4.3 post方式推送文件到服务端 准备:httpclient-4.3.3.jar:httpcore-4.3.2.jar:httpmime-4.3.3.jar/*** 上传文件 ...

  5. HttpClient上传文件传入MultipartFile类型

    通常我们在使用httpclient的时候,一把都是使用get或者postd的方式传输一些数据.在近期的项目中有这样的一个需求,我需要通过httpclient去调用一个写好的文件上传的接口,接口中是使用 ...

  6. Zuul上传文件,中文文件名乱码解决办法

    问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuul服务,上传中文名字的文件,文件名会出现乱码,最终导致上传失败,如果上传英文名字的文件,没有任何问题.怀疑网 ...

  7. WINDOWS上传文件到LINUX中文乱码

    现象:WINDOWS上传文件到LINUX后,中文文件名乱码,中文内容乱码 解决:首先考虑到的应该是字符编码不一致导致,其次再看是否没安装中文包 1:检查是否安装convmv工具 [oracle@res ...

  8. C# HttpClient上传文件并附带其它参数

    1.Fiddler抓包参数详情 Content-Type: multipart/form-data; boundary="8d9ade1fd906a6a" Content-Leng ...

  9. hdfs上传文件没有权限写入的问题解决put: Permission denied: user=root, access=WRITE

    问题: 如题,在上传文件的时候出现没有权限写入的问题: 命令: hdfs dfs -put dummy_log_data /user/impala/data/logs/year=2013/month= ...

最新文章

  1. 本地连接出来的很慢解决方法
  2. 11.分页(10-10-12)
  3. 什么能在main()函数之前或之后执行
  4. debian jessie install note
  5. Spring Data Solr教程:分页
  6. [js] 用js写一个方法检测浏览器是否支持css3的属性
  7. 虎记:强大的nth-child(n)伪类选择器玩法
  8. 8004.ros2中添加boost依赖库写法
  9. es6删除数组某一项_「JavaScript 从入门到精通」10.数组
  10. Usually, these regular meetings do not have
  11. 对象转map工具类BeanUtil
  12. java基于springboot+vue的校园一卡通管理系统 ssm nodejs
  13. python日历教程_基于python实现简单日历
  14. 【zigbee无线通信模块步步详解】ZigBee3.0模块建立远程网络控制方法
  15. 读《当下的力量》有感
  16. 提高篇 第四部分 数据结构 第1章 树状树组
  17. P2P穿透StunServer
  18. 阿里物联网iot 网关配置 gateway 与子设备
  19. Linux运维 | 私人服务器搭建的全过程
  20. 从事了二年的Windows系统USB驱动开发

热门文章

  1. Linux文件---文件锁
  2. Hive自定义函数报错10014 :No matching method for class
  3. 乱码问题-Quoted-printable编码
  4. 计算机科学给稿费多少,科学网—千字千元的稿费标准高吗? - 籍利平的博文
  5. nginx配置多个一级域名https访问的配置
  6. SQL字符串首字母大写
  7. Android游戏开发教程汇总
  8. 自己想要什么 过什么样的生活
  9. 嵌入式面试之————大小端
  10. 使用PyTorch Lightning自动训练你的深度神经网络