微信开发时遇到的UrlConnection请求乱码的问题

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

为了找到原因,做了很多测试,查了一下午百度,最后得出结论,因为微信那边平台使用的是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流了。

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

时间: 2024-11-03 05:41:29

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

微信开发时遇到底部遮挡输入框的解决方案

在开发微信公众号功能时,页面底部一般会声明一些公司的版权之类的.但是如果用户需要在页面输入内容时,底部会漂浮在输入法的上面,甚至有的时候不是紧贴着输入法,而是有一小段间距.既影响用户输入又影响页面美观.截图是出现问题的页面: 解决问题的方案是,将如下的js放入出现此问题的页面中.js源码如下: //解决输入被遮挡问题 window.onresize = function() { var top = $("#footer").offset().top; var user_message_

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.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document; import org.dom4j.E

微信开发(八)微信网页授权( Oauth )通过Oauth获取用户信息

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/45340951 网页授权 微信开发时,我们总是想要尽可能多的活动用户的信息.但微信官方和用户本身,又不想暴露这些信息.搞来搞去,就出现了很多奇形怪状的规则和交互方式.微信网页授权就是其中之一,它可以

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

微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服务器 1.我购买的是阿里云服务器,购买后要设置一下服务器密码,默认用户名是administrator,购买好后如下: 2.申请好后,copy一下此服务器的IP地址(公有),在本地ping一下看看是否可用,j键盘Win+R,输入cmd,输入ping+IP回车,如下即为成功: 二.配置服务器 1.下载远

微信开发系列----02:实现POST请求响应

继续昨天的,现在我们的微信测试成功了,可以开发实现微信的各种功能,今天主要实现微信的简单交互,比如发送语音,图片,文本等请求,网站服务器发送对应的响应. 项目GitHub地址:  https://github.com/Andyahui/xgyxsh_WeiXin 一:微信XML的POST请求处理 昨天我们已经成为了开发者,说明get请求时可以到底,且是得到了相应的处理,下面是我们通过浏览器我们配置的URL浏览到的. 我们可以发现在get请求中设置的返回值在这里出现了,说明我们的测试是成功的.下面

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

微信公众平台开发时,需要验证消息是否来自微信服务器,这要用到sha1加密算法,官网上给的是php的sha函数,C++中要用到下面这个函数: 一.引入头文件: #include<openssl/sha.h> #include<inttypes.h> 二.用这个函数转码: //函数功能:将传入的字符串用sha1加密算法加密后传出 //strOriginal:原始字符串 //返回值:加密后的字符串 stringGetSha1Str(const string& strOrigina

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

Brophp框架开发时连接数据库读取UTF8乱码的解决办法 (2012-09-15 10:41:22) 转载▼ 标签: 杂谈 it php 分类: 建站技术 Brophp框架开发时连接数据库读取UTF8乱码的解决用brophp框架读取数据库的时候发生乱码,数据库和源码都采用的utf-8编码,按理说不应该出现乱码的.仔细分析应该是出在数据连接时,后来看到一个高手的解答总算弄明白了.英文正常读取而中文乱码,基本上都是字符集的问题.要在PHP端发送set names utf8.声明和数据库握手的时候也

浅谈webform开发时前台请求后台数据的方法

说到前台请求后台数据,我们一般都是用到AJAX(异步JavaScript和XML) .AJAX 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,我们可以对网页的某部分进行更新.在这里,主要浅谈一下在.net的webform开发时,前台请求后台的两种方式. 1.使用AjaxPro2.dll  (1)AjaxPro2.dll文件可以去网上下载,下载后引用到项目中. (2)引用到项目之后,在web.config里面的<system.web

pycharm开发python时出现控制中文显示乱码

当pycharm开发python时,中文出现乱码 修改setting文件 这样就能正常显示 pycharm开发python时出现控制中文显示乱码