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

OutputFormat方法がありsetEncoding(String)ます。そのように使用してください:

format.setEncoding(document.getXmlEncoding());

これにより、ドキュメントの元のエンコードが出力ドキュメントのプリアンブルに保持されます。ただし、ドキュメントの元のエンコーディングが設定されていない場合は、document.getXmlEncoding() が返さnullれ、Javadocは、指定さOutpoutFormat.setEncoding(String)れたときにメソッドがどのように動作するかを指定しませんnull

もちろん、ファイルに書き込むカスタム メソッドは、エンコーディングをパラメーターとして受け取る必要があります。これは、プリアンブルでエンコーディングを指定し、ファイルへの書き込み時に別のエンコーディングを使用することは違法であるためです。

ちなみに、XML では UTF-8 エンコーディングがデフォルトです。したがって、プリアンブルのエンコーディングを省略したり、UTF-8 を指定したりすることは同じ意味です。

于 2013-10-03T10:36:07.627 に答える
1

Document.getEncodingそれをコンストラクター引数として使用して、OutputFormatクラスのオーバーロードされたコンストラクターに渡すことができます。

于 2013-10-03T10:38:38.187 に答える