Xml转换编码问题

时间:2011-08-09 11:51:00

标签: java xml transformation

您好我有一个简单的代码:

    InputSource is = new InputSource(new StringReader(xml))
    Document d = documentBuilder.parse(is)
    StringWriter result = new StringWriter()
    DOMSource ds = new DOMSource(d)
    Transformer t = TransformerFactory.newInstance().newTransformer()
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    t.setOutputProperty(OutputKeys.STANDALONE, "yes");
    t.setOutputProperty(OutputKeys.ENCODING,"UTF-16")
    t.transform(ds,new StreamResult(result))
    return result.toString()

应该将xml转换为UTF-16编码。虽然我知道jvm中String的内部表示已经使用了UTF-16字符,但我的期望是结果String应该包含一个标题,其中编码设置为“UTF-16”,originla xml,它是UTF-8但我明白了:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

(独立属性似乎也错了) 变换器实例是:com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl (我认为是默认的) 那么我想念的是什么?

2 个答案:

答案 0 :(得分:1)

使用编写器将显式声明UTF-16作为输出编码。尝试OutputStreamWriter(OutputStream out, String charsetName),它应该包裹ByteArrayOutputStream,看看是否有效。

答案 1 :(得分:0)

我现在已经自己写了一个测试。只做一个小改动:

 t.transform(ds,new StreamResult(new File("dest.xml")));

我有相同的结果该文件确实是UTF-16编码,使用十六进制编辑器检查。由于某些奇怪的原因,xml声明不会更改。所以你的代码可以工作。