zoukankan      html  css  js  c++  java
  • 小结getBytes()默认编码导致的xml字符串中出现乱码

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

    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"));

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

  • 相关阅读:
    剑指offer--38.左旋转字符串
    剑指offer--37.和为S的两个数字
    剑指offer--35.数组中只出现一次的数字
    剑指offer--34.数字在排序数组中出现的次数
    剑指offer--33.丑数
    SSIS包定时执行
    在SSIS 的 64 位版本中不支持 Excel 连接管理器[转]
    sql中的sp_helptext、sp_help 、sp_depends
    SQL去除回车符,换行符,空格和水平制表符
    SQL Server中bcp命令的用法以及数据批量导入导出
  • 原文地址:https://www.cnblogs.com/chyu/p/4276078.html
Copyright © 2011-2022 走看看