• 对象转为xml输出到页面,中文乱码问题


    本项目是一个webseriice的客户端项目

    Action 类:

    SearchHotelRQ reqobj = XmlObjUtil.xml2Obj(reqstr, SearchHotelRQ.class);
                SearchHotelRS searchHotelRS = port.searchHotel(reqobj);
                resxml = XmlObjUtil.objToXmlString(searchHotelRS);
                return resxml;

    对象转为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\"?>", ""));取到的中文是乱码

  • 相关阅读:
    property补充
    利用描述符自定制property
    类的装饰器
    上下文协议管理
    描述符
    迭代器协议
    doc属性__module__属性__del__(垃圾回收)__call__方法
    【移动支付】.NET支付宝App支付接入
    【WPF】PopupColorEdit 的使用
    【MVVM Dev】PART_Editor的使用
  • 原文地址:https://www.cnblogs.com/zyfxlv/p/2872955.html
Copyright © 2020-2023  润新知