JOX解决乱码和输出时间格式的方法

从简单的说吧。
1.时间格式的设置
JOXDateHandler会使用系统设置的com.oce.wutka.dateFormat属性,这个属性可能是在dtdparser113.jar中设置的,因为没有源码所以只是猜的。
在你的代码中加入System.setProperty("com.oce.wutka.dateFormat",format);来设置你希望的时间格式。

2.乱码
JOXBeanOutputStream的构造函数可以指定输出的XML文件头的encoding值,但是对内容没有影响,其实我想这也它的一个bug,原因是JOXBeanOutputStream类的writeString(String str)有问题。
 public void writeString(String str) throws IOException {
        write(str.getBytes());
    }

解决办法是继承JOXBeanOutputStream,然后重写这个方法。
 public void writeString(String str) throws IOException {
        write(str.getBytes(encoding));
    }


还有另一种方式,不用JOXBeanOutputStream,使用JOXBeanDOM
JOXBeanDOM dom = new JOXBeanDOM(false);
Document beanToDocument = dom.beanToDocument("MarkTest", b);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty("encoding", "GB2312");
transformer.setOutputProperty("indent", "GB2312");
DOMSource source = new DOMSource(beanToDocument);
StreamResult result = new StreamResult(new OutputStreamWriter(
                    new FileOutputStream(new File("bean31.xml")), "GB2312"));
transformer.transform(source, result);




你可能感兴趣的:(xml)