您好我有一个简单的代码:
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 (我认为是默认的) 那么我想念的是什么?
答案 0 :(得分:1)
使用编写器将显式声明UTF-16作为输出编码。尝试OutputStreamWriter(OutputStream out, String charsetName)
,它应该包裹ByteArrayOutputStream
,看看是否有效。
答案 1 :(得分:0)
我现在已经自己写了一个测试。只做一个小改动:
t.transform(ds,new StreamResult(new File("dest.xml")));
我有相同的结果但该文件确实是UTF-16编码,使用十六进制编辑器检查。由于某些奇怪的原因,xml声明不会更改。所以你的代码可以工作。