遇到乱码第一印象想到的是如何统一编码,很少注意到这期间穿插的某些过程也是一大隐患..

sae上部署了一个spring写的微信小程序,手机总关注测试号点击菜单得到的文本消息却是乱码..

聚焦发送消息的部分代码:

response.setCharacterEncoding("utf-8");
response.getOutputStream().write(result.getBytes());

编码已经设置为utf-8,spring也加了过滤器进行utf-8的解码...而且控制台也的确打印出没有乱码的发送信息..想当然的认为这头一定没问题..

然后只好写个测试代码从获得数据的那头获取:

entity = new StringEntity(doc.asXML());
post.setEntity(entity);
HttpResponse response = client.execute(post);
String result = EntityUtils.toString(response.getEntity());
System.out.println("结果:"+result);

结果得到的就是乱码,如果接收方代码如下改则不会乱码:

String result = EntityUtils.toString(response.getEntity(),"gbk");

证明乱码部分发过来的是gbk的..我的确是有点蒙了,下午被sae的坑人环境坑了大半天脑袋早木了..又细想了一下既然发过来是乱码,编码的时候又是正常的,那也只可能是getBytes()这一处能出问题了,也只有这一处动过编码后的字符串..看看api说明吧:

Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array. 

我倒了..这才恍然大悟,我本地是windows系统,默认是gbk,所以此处会将那部分中文按照gbk编码然后传过去,因为我们response.setXX("utf-8")了,所以接收方按照utf-8来解码,直接乱码..

所以我们应该改成:

response.setCharacterEncoding("utf-8");
response.getOutputStream().write(result.getBytes("utf-8"));

则接收方无需做任何处理便可得到没有乱码的中文..

小结getBytes()默认编码导致的xml字符串中出现乱码的更多相关文章

  1. 获取xml字符串中的属性值

    pagexml = @"<?xml version='1.0' encoding='utf-8'?> <DATAPACKET Version='2.0'> <M ...

  2. String 字符串中含有 Unicode 编码时,转为UTF-8

    1.单纯的Unicode 转码 String a = "\u53ef\u4ee5\u6ce8\u518c"; a = new String(a.getBytes("UTF ...

  3. c#解析xml字符串 分析 EntityName 时出错

    因为xml字符串中的特殊html字符被转义了,怎么防止转义呢,可以在xml内加上<![CDATA[返回内容]] 这样可以防止特殊字符被转义,就好像微信公共平台消息传递也都是xml格式他们也都加& ...

  4. java 文件中 定义一个字符串,它的默认编码是什么?

    .java 文件的编码就是 String 字符串的编码 File 文件的编码就是 文件内容的编码 request 的设置的编码就是inputstream 的编码 jvm 的默认编码(the defau ...

  5. python处理dict转json,字符串中存在空格问题,导致url编码时,存在多余字符

    在进行urlencode转换请求的参数时,一直多出一个空格,导致请求参数不正确,多了一个空格,解决方法一种是将dict中key-value键值对的value直接定义为字符串,另一种是value仍然为字 ...

  6. linux 关于Apache默认编码错误 导致网站乱码的解决方案

    Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题   最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题: A网站 ...

  7. C#的默认编码

    C# 的所有源代码文件,默认编码为 UTF-8,注意,是源代码文件,而不是 C# 中的 string. C# 中的所有 string,默认编码均为 Unicode (UTF-16). C# 产生的 A ...

  8. 深入解析java String中getBytes()的编码问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6900536.html Java服务器后台在和Android端App通信时,遇到了两端关于用MD5加密同一包含 ...

  9. 解析xml字符串时报“前言中不允许有内容”错误。

    一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...

随机推荐

  1. 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想

    总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...

  2. 【jQuery基础学习】03 jQuery中的事件与动画

    关于jQuery中的事件 js与HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的. jQuery增加并扩展了基本的事件处理机制,jQuery不仅提供了更加优雅的事件处理方法,而且极大地 ...

  3. sql server2008中sql server身份能登录,window身份登录不了

    用sql server身份的sa登录成功进入,一切正常,用window身份登录不了,问题如下

  4. Flask and uWSGI - unable to load app 0 (mountpoint='') (callable not found or import error)

    Here is my directory structure: -/path/to/folder/run.py -|app -|__init__.py -|views.py -|templates - ...

  5. ati显卡驱动后,性能不咋地

    ubuntu装了ati的闭源驱动后,拖动窗口,会有明显的断裂感,不够平滑

  6. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  7. jquery 下拉选择框/复选框常用操作

    通常 1.我们需要获取select中选中的值,可以使用: $("#selectID").find("option:selected").val();  --一般 ...

  8. velocity merge作为工具类从web上下文和jar加载模板的两种常见情形

    很多时候,处于各种便利性或折衷或者通用性亦或是限制的原因,会借助于模板生成结果,在此介绍两种使用velocity merge的情形,第一种是和spring mvc一样,将模板放在velocityCon ...

  9. JavaScript基础11——js的全局函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Vue计算属性

    github地址:https://github.com/lily1010/vue_learn/tree/master/lesson06 一 计算属性定位 当一些数据需要根据其它数据变化时,这时候就需要 ...