我有一些代码可以读入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());
感谢任何帮助。感谢。
答案 0 :(得分:4)
OutputFormat
有setEncoding(String)
方法。以这种方式使用它:
format.setEncoding(document.getXmlEncoding());
这将使文档的原始编码保留在输出文档前导码中。但是,如果未设置文档的原始编码,则document.getXmlEncoding()返回null
和OutpoutFormat.setEncoding(String)
的Javadoc未指定方法在给定null
时的行为方式。< / p>
当然,写入文件的自定义方法需要将编码作为参数,因为在前导码中指定编码并在写入文件时使用另一个编码是非法的。
作为旁注,在XML中,UTF-8编码是默认编码。因此,省略前导码中的编码或指定UTF-8具有相同的含义。
答案 1 :(得分:1)
您可以使用Document.getEncoding
并将其作为构造函数参数传递给OutputFormat
类的重载构造函数。
答案 2 :(得分:-1)
默认情况下,创建StreamWriter以使用不带前导码的UTF-8。详情请见here