JAXB 转 XML乱码

为JAXB和response设置编码,解决wechat4j中文乱码

https://blog.csdn.net/qing_gee/article/details/52788962

 

在web环境中使用JAXB技术对XML文件进行序列化和反序列化时如何避免乱码

http://www.cnblogs.com/hzhuxin/archive/2012/10/29/2745293.html

 注:通过System.getProperty("file.encoding")可以获知当前执行环境的编码。通过该属性发现有时WEB环境下和测试用例环境下编码会不一样,这就会导致有时测试正常,实际环境下运行出现乱码的原因。

总结:掌握两个原则(1)用JAXB转XML为对象时,会转对象编码为本地JAVA环境的字符编码

(2) 用JAXB转对象为XML时,默认会转为UTF-8编码,所以要保证不出乱码,转的时候应指定转为与本地JAVA环境相同的字符编码,或者保证在转的时候同时指定文件编码和转换的输出流编码一致

 

 

http://www.cnblogs.com/zyfxlv/archive/2013/01/23/2872955.html

对象转为xml的方法:objToXmlString

复制代码

public static <T> String objToXmlString(T obj) throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance(obj.getClass());
        Marshaller m = jc.createMarshaller();
        m.setProperty("jaxb.formatted.output", true);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        Result result = new StreamResult(out);
        m.marshal(obj, result);
        //转码
        byte[] bystr = out.toByteArray();
        String str = "";
        try {
             str = new String(bystr,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        StringBuffer sb = new StringBuffer(str.replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", ""));
        //log.error("JAXB transform object to string without version: "+ sb.toString());
        return sb.toString();
    }

复制代码

第一种转码方式(在网上找的):  m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");但在我这个项目中不起作用,不知为什么

第二种:上面方法中转码那一步,如果不转码,直接这么写的话,StringBuffer sb = new StringBuffer(new String(out.toByteArray()).replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", ""));取到的中文是乱码

 

4  java中文乱码字符集解决大全

https://blog.csdn.net/wo6925371/article/details/5996079

 

5 处理中文乱码和部分乱码

https://blog.csdn.net/lhzjj/article/details/41802761

清晰图片见如下

https://www.cnblogs.com/Tony-Mu/articles/2428549.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值