昨天做一个微信的模板消息推送的功能,功能倒是很快写完了,我本地测试微信收到的推送消息是正常的,但是一部署到服务器后微信收到的推送消息就变成乱码了。

为了找到原因,做了很多测试,查了一下午百度,最后得出结论,因为微信那边平台使用的是UTF-8的编码,我本地使用的也是UTF-8编码,但是我们公司的linux服务器上使用的却是GB18030的编码,所以出现了乱码,现在把调用消息模板后的发送POST请求的代码修改如下,就没有问题了:

  1. /**
  2. * 向指定 URL 发送POST方法的请求
  3. *
  4. * @param url 发送请求的 URL
  5. * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  6. * @return 所代表远程资源的响应结果
  7. */
  8. public static String sendPost(String url, String param) {
  9. //PrintWriter out = null;//原来使用的输出流
  10. OutputStreamWriter out = null;//修改后的
  11. BufferedReader in = null;
  12. String result = "";
  13. try {
  14. URL realUrl = new URL(url);
  15. //打开和URL之间的连接
  16. URLConnection conn = realUrl.openConnection();
  17. //设置通用的请求属性
  18. conn.setRequestProperty("accept", "*/*");
  19. conn.setRequestProperty("connection", "Keep-Alive");
  20. conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  21. conn.setRequestProperty("Charset", "UTF-8");
  22. //发送POST请求必须设置如下两行
  23. conn.setDoOutput(true);
  24. conn.setDoInput(true);
  25. //获取URLConnection对象对应的输出流
  26. //原来的,这句代码引起字符集的变化,如果项目不是UTF-8就会转成当前环境的编码
  27. //out = new PrintWriter(conn.getOutputStream());
  28. //修改后的,这里可以设定字符集
  29. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  30. //发送请求参数
  31. //out.print(param);//原来的
  32. out.write(param);//修改后的
  33. //flush输出流的缓冲
  34. out.flush();
  35. //定义BufferedReader输入流来读取URL的响应
  36. in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
  37. String line;
  38. while ((line = in.readLine()) != null) {
  39. result += line;
  40. }
  41. } catch (Exception e) {
  42. System.out.println("发送 POST 请求出现异常!"+e);
  43. e.printStackTrace();
  44. }
  45. //使用finally块来关闭输出流、输入流
  46. finally{
  47. try{
  48. if(out!=null){
  49. out.close();
  50. }
  51. if(in!=null){
  52. in.close();
  53. }
  54. }
  55. catch(IOException ex){
  56. ex.printStackTrace();
  57. }
  58. }
  59. return result;
  60. }

问题终于解决了,究其原因还是对流的学习不够认真,接下来准备好好研究下java里的IO流了。

补l两条:

可以使用这条代码获取文件运行环境的编码方式:System.getProperty("file.encoding");

如果参数param涉及到加密的字段,需要将加密的字符先转成UFT-8的编码格式,比如密码字段String password的处理(我没用到):

String psd= new String(password.getBytes("ISO8859-1"), "UTF-8");

微信开发时遇到的UrlConnection乱码的问题的更多相关文章

  1. Brophp框架开发时连接数据库读取UTF8乱码的解决(转)

    Brophp框架开发时连接数据库读取UTF8乱码的解决办法 (2012-09-15 10:41:22) 转载▼ 标签: 杂谈 it php 分类: 建站技术 Brophp框架开发时连接数据库读取UTF ...

  2. 微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用

    js代码如下: JavaScript code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  3. 关于TP3.2微信开发那点事(基础篇)

    许久没有为博客更新内容,今天我将过去一周做的微信服务号的相关心得体会在此分享,具体如何申请成为服务号的相关流程文档都有,可根据要求完成: 开发第一步:开发前配置: AppID-->微信号的&qu ...

  4. 带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)

    微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服 ...

  5. Java微信开发_Exception_01_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from required .class files

    一.源码: package com.souvc.weixin.util; import java.io.InputStream; import java.io.Writer; import java. ...

  6. 反射解决微信开发加解密illegal key size,不需要修改JDK jar包

    在微信开发时,消息接口时,涉及到消息加密,抛出了 java.security.InvalidKeyException: Illegal key size 的异常,异常堆栈如下: 按照网上的解决方案,都 ...

  7. 微信jsSDK公众号开发时网页提示 invalid signature错误的解决方法

    微信公众号开发jsSDK,链接地址不能加?参数,可以通过#传递参数. 不然.页面wx.ready()时就会报错,用 wx.error(function (res) { alert("接口验证 ...

  8. 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法

    微信公众平台开发时,须要验证消息是否来自微信server,这要用到sha1加密算法.官网上给的是php的sha函数,C++中要用到以下这个函数: 一.引入头文件: #include<openss ...

  9. 微信开发:微信js_sdk分享,使用场景,网页在微信app内部分享时的标题与描述,包括logo设置(一)

    主要有下面几步.首先大家先分清楚 小程序的appid,appSecret 跟公众号的appid,appSecret是不一样的.因为这两个都能拿到token,且是不同的值. 准备开始: 1.准备好 公众 ...

随机推荐

  1. Cimg代码初探

    Cimg代码初探     程序设计最为激动人心的地方,在于丰富的并且容易被查阅到资料.比如对于图像处理,固然有Opencv等较为丰富.被广泛知晓的类库:也有其他很多具有一定特色的类库.在这段时间里面, ...

  2. c++中函数empty()怎么使用

    string s = "";if (s.empty()){ cout << "字符串为空..";}else{ cout << " ...

  3. Oracle 客户端安装配置

    电脑上安装了Oracle11G,我远程导出一个10g的数据库数据时,报了错误,猜测可能是我的11G客户端版本的问题.所以下载了10G的客户端 安装. 其实客户端的配置读取的是两个文件监听配置文件lis ...

  4. 2016年10月15日 星期六 --出埃及记 Exodus 18:26

    2016年10月15日 星期六 --出埃及记 Exodus 18:26 They served as judges for the people at all times. The difficult ...

  5. program

    [题目分析] 题目的意思是在一个数列中找到四个数,a[i]=a[j]<a[k]=a[l],其他都扯淡. 先把这些数sort一下,所有相等的数字就都排在一起了,然后这个数列可以按照数字的种类划分成 ...

  6. 洛谷 P1896 [SCOI2005]互不侵犯King

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出格式 输入格式: 只有一行,包 ...

  7. spark1.4

    spark1.4 Windows local调试环境搭建总结 1.scala版本 scala-2.10.4 官方推荐 scala-2.11.7[不推荐,非sbt项目.需要后加载] 2.spark版本 ...

  8. 3-WebPack

    一. 什么是WebPack WebPack可以看做是模块加载.打包工具. 它所做的事情是 1.分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Typ ...

  9. VS2015使用技巧 打开代码片段C#部分

    镇场诗: 大梦谁觉,水月中建博客.百千磨难,才知世事无常. 今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1. ...

  10. JavaWeb(一)

    Web应用程序开发是目前软件开发领域的三大方向之一. 静态网页与动态网页 静态网页 表现形式:网页的内容是固定的,不会更新: 使用的技术:HTML,CSS 动态网页 表现形式:网页中的内容通过程序动态 ...