java微信 客服接口-发消息 中文乱码

来源:互联网 发布:龙腾数据恢复软件官网 编辑:程序博客网 时间:2024/05/07 14:12
/** * 向指定 URL 发送POST方法的请求 *  * @param url *            发送请求的 URL * @param param *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */public static String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();//设置通用的请求属性conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流OutputStreamWriter outWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");out = new PrintWriter(outWriter);// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {in = new BufferedReader(new InputStreamReader(conn.getInputStream()));result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!"+e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOException ex){ex.printStackTrace();}}return result;}   


/** * 普通文本消息,需用户在48h与公共帐号有互动 * 微信公共账号发送给账号 * @param content 文本内容 * @param toUser(OPENID) 微信用户   * @return */public static void sendTextMessageToUser(HttpServletRequest request,String content,String toUser){String json = "{\"touser\": \""+toUser+"\",\"msgtype\": \"text\", \"text\": {\"content\": \""+content+"\"}}";//获取access_tokenString accessToken = getAccessToken(request);//发送模版消息给指定用户String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+accessToken;System.out.println("json:"+json);try {String result = HttpJsonUtil.sendPost(action, json);System.out.println(result);} catch (Exception e) {e.printStackTrace();}}




我自己都不知道在这个地方倒下了多少次了:

关键代码:

// 获取URLConnection对象对应的输出流
OutputStreamWriter outWriter = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
out = new PrintWriter(outWriter);


乱码时候的写法是:

in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

1 0
原创粉丝点击