2

我有一些代码读取 XML 文件,对其进行格式化,然后再次将其输出到同一个文件。但是,如果未定义编码,则输出 XML 已定义 UTF-8。

例如:

<?xml version="1.0"?>

变成:

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

我想知道是否有任何方法可以保留以前存在的任何编码(或缺少编码)?

这是我当前的代码:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document document = docBuilder.parse(file);

OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(2);

Writer out = new StringWriter();
XMLSerializer serializer = new XMLSerializer(out, format);
serializer.serialize(document);

//custom method to write file
writeFile(filePath, out.toString());

任何帮助表示赞赏。谢谢。

4

3 回答 3

4

OutputFormatsetEncoding(String)方法。以这种方式使用它:

format.setEncoding(document.getXmlEncoding());

这将在输出文档序言中保留文档的原始编码。但是,如果未设置文档的原始编码,则 document.getXmlEncoding() 返回null并且 Javadoc forOutpoutFormat.setEncoding(String)未指定在给定时该方法的行为方式null

当然,您写入文件的自定义方法需要将编码作为参数,因为在前导码中指定编码并在写入文件时使用另一种编码是非法的。

附带说明一下,在 XML 中,UTF-8 编码是默认的。所以在序言中省略编码或指定UTF-8具有相同的含义。

于 2013-10-03T10:36:07.627 回答
1

您可以使用Document.getEncoding它并将其作为构造函数参数传递给OutputFormat类的重载构造函数。

于 2013-10-03T10:38:38.187 回答
-1

默认情况下,StreamWriter 是为使用没有前导码的 UTF-8 而创建的。在此处查看详细信息

于 2013-10-03T10:09:58.717 回答