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

Era*_*dan 5 java xml xslt character-encoding

假设这个输入XML

<?xml version="1.0" encoding="UTF-16"?>
<test></test>
Run Code Online (Sandbox Code Playgroud)

编写这些代码行:

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();
Run Code Online (Sandbox Code Playgroud)

输出这个XML:

<?xml version="1.0" encoding="UTF-8"?>
<test></test>
Run Code Online (Sandbox Code Playgroud)

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

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

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16");
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*rdt 5

为此,您必须使用比StreamSource. 例如, aStAXSource接受一个XMLStreamReader,它具有getCharacterEncodingScheme()告诉您输入文档使用哪种编码的方法 - 您可以将其设置为输出编码。