Java中将XML写入文件并指定编码,核心是用Transformer设置OutputKeys.ENCODING并配合OutputStreamWriter(如UTF-8),确保声明与实际编码一致;直接使用StreamResult(File)会导致声明与字节编码不匹配而乱码。
Java中将XML文档写入文件并指定编码,核心是使用Transformer配合OutputKeys.ENCODING设置编码,并确保输出流(或Writer)与之匹配。关键在于:编码必须在Transformer中声明,且底层输出目标需支持该编码(如用FileOutputStream时需包装为OutputStreamWriter,或直接用StreamResult接受Writer)。
使用Transformer + OutputStreamWriter(推荐)
这是最可控、兼容性最好的方式,能明确指定字符编码,避免平台默认编码干扰。
- 创建
Document或从解析获得DOM树 - 获取
TransformerFactory并新建Transformer - 设置
OutputKeys.ENCODING为所需编码(如"UTF-8") - 用
FileOutputStream构造OutputStreamWriter,指定相同编码 - 将
OutputStreamWriter封装为StreamResult传给transform()
示例代码:
Document doc = ... // 已构建好的DOM文档
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("output.xml"), StandardCharsets.UTF_8)) {
transformer.transform(new DOMSource(doc), new StreamResult(writer));
}
直接使用StreamResult(File)的注意事项
若直接传new StreamResult(new File("output.xml")),Transformer会内部用平台默认编码写入,OutputKeys.ENCODING仅影响XML声明(如),实际字节可能乱码。
立即学习“Java免费学习笔记(深入)”;