2013-10-03 29 views
2

我有一些读取XML文件的代码,对它进行格式化,然后再输出到同一个文件。但是,如果没有定义编码,输出XML将定义UTF-8。有没有简单的方法来解析Java中的XML而不添加默认编码?

例如:

<?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

OutputFormat有一个setEncoding(String)方法。使用这种方式:

format.setEncoding(document.getXmlEncoding()); 

这将保持原始文档的编码输出文件前。但是,如果文档的原始编码未设置,则document.getXmlEncoding()返回null,而Javadoc的OutpoutFormat.setEncoding(String)不指定方法在给定null时的行为方式。

当然,写入文件自定义方法将需要采取的编码作为参数,因为它是非法的规定在序言的编码和写入文件时使用另一个。

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

+1

+1的详细信息。 – prabugp

+0

这工作完美。如果我定义了编码,它会将其输出并输出确切的一个;如果我没有定义它,将不会输出默认值。感谢您的详细解释。这是一个很大的帮助。另外,我将为XML使用一些自定义解释器,并且遇到了一些以不同方式处理编码指定和编码歧义文件的地方。所以在格式化时我想保持原样。再次感谢! – NotACleverMan

-1

默认情况下,StreamWriter是为使用UTF-8而不带前导码而创建的。看详情here

+1

不知道如何写这不听起来粗鲁,但我使用Java和StringWriter,而不是C#和StreamWriter。他们有什么关系? – NotACleverMan

1

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

相关问题