3

XMLファイル内に特別なUTF-8文字が含まれていると、SAXパーサーが失敗する理由を説明したいと思っています。

私が使用するXMLファイルを解析するにはDocument doc = builder.parse(inputSource);

ただし、それを使用するinputSourceと正常に動作します。

DocumentBuilder builder = factory.newDocumentBuilder();
InputStream in = new FileInputStream(file);
InputSource inputSource = new InputSource(new InputStreamReader(in));
Document doc = builder.parse(inputSource);

後者がなぜ機能するのかよくわかりません。使用例を見てきましたが、なぜ機能するのか説明がありません。2番目はファイルではなく文字列を解析するので、エンコーディングはUTF-8になりますか?

4

1 に答える 1

7

あなたのドキュメントは実際にはあなたが宣言したエンコーディングではないのではないかと思います。この行:

InputSource inputSource = new InputSource(new InputStreamReader(in));

プラットフォームのデフォルトエンコーディングを使用して、バイナリデータを内のテキストに変換しますInputStreamReader。XMLパーサーはそれを実行できなくなります-生のバイトを表示することはできません。

これが機能している場合、XMLファイルはおそらく微妙に壊れています-UTF-8であると宣言している可能性がありますが、プラットフォームのデフォルトエンコーディング(Windows-1252など)を使用しています。回避策を使用するのではなく、XMLについて選択できる場合は、XMLを修正する必要があります。

于 2012-07-09T15:01:35.330 に答える