如何在javax.xml.transform.Transformer.transform的输出中保留输入声明的编码? (例如,避免UTF-16更改为UTF-8)

假设这个输入XML

<?xml version="1.0" encoding="UTF-16"?>
<test></test>

编写这些代码行:

StreamSource source = new StreamSource(new StringReader(/* the above XML*/));
StringWriter stringWriter = new StringWriter();
StreamResult streamResult = new StreamResult(stringWriter);
TransformerFactory.newInstance().newTransformer().transform(source, streamResult);
return stringWriter.getBuffer().toString();

输出这个XML:

<?xml version="1.0" encoding="UTF-8"?>
<test></test>

(声明的UTF-16编码转换为认的UTF-8)

我知道我可以明确要求输出UTF-16

transformer.setoutputProperty(OutputKeys.ENCODING, "UTF-16");

但问题是,如何使输出编码自动与输入相同?

解决方法:

要做到这一点,你必须使用比StreamSource更复杂的东西.例如,StAXSource采用XMLStreamReader,它具有getCharacterEncodingScheme()方法,告诉您输入文档使用了哪种编码 – 您可以将其设置为输出enocding.

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念