有没有一种简单的方法来解析Java中的XML而不添加默认编码?

时间:2013-10-03 10:01:13

标签: java xml encoding

我有一些代码可以读入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());

感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:4)

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

format.setEncoding(document.getXmlEncoding());

这将使文档的原始编码保留在输出文档前导码中。但是,如果未设置文档的原始编码,则document.getXmlEncoding()返回nullOutpoutFormat.setEncoding(String)的Javadoc未指定方法在给定null时的行为方式。< / p>

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

作为旁注,在XML中,UTF-8编码是默认编码。因此,省略前导码中的编码或指定UTF-8具有相同的含义。

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

默认情况下,创建StreamWriter以使用不带前导码的UTF-8。详情请见here