有没有一种不用添加默认编码就可以在Java中解析XML的简单方法?
我有一些代码,它读取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());
感谢您的帮助。谢谢
# 1 楼答案
OutputFormat
有一个setEncoding(String)
方法。这样使用:这将在输出文档前言中保留文档的原始编码。但是,如果文档的原始编码未设置,文档将被删除。getXmlEncoding()返回
null
,并且OutpoutFormat.setEncoding(String)
的Javadoc没有指定给定null
时方法的行为当然,写入文件的自定义方法需要将编码作为参数,因为在前导中指定编码并在写入文件时使用另一种编码是非法的
另外,在XML中,UTF-8编码是默认的。因此,在前导中省略编码或指定UTF-8具有相同的含义
# 2 楼答案
默认情况下,创建StreamWriter是为了使用不带前导的UTF-8。详见here
# 3 楼答案
可以使用
Document.getEncoding
并将其作为构造函数参数传递给OutputFormat
类的重载构造函数