4

ACII エンコードされた XML ファイルがあります。

2 つの異なる Microsoft XmlReader 実装を使用して、それを読み取ろうとしました。

  1. XmlReader.Create(new StreamReader(fileImport.FileContent, true));
  2. new XmlTextReader(fileImport.FileContent)

1 つ目の XmlReader.Create は、エンコーディングに StreamReader を使用し、うまく機能します。

2 番目の新しい XmlTextReader は、「指定されたエンコーディングでは無効な文字です」というメッセージとともに XmlException をスローします。

これらの両方の MSDN ドキュメントを読むと、どちらもバイト オーダー マークからエンコーディングを検出するはずであり、それが失敗した場合は UTF-8 にフォールバックします。

XmlTextReader[msdn] XmlTextReader.Encoding プロパティ

StreamReader[msdn] StreamReader コンストラクター

では、XmlTextReader は無効なエンコーディングで失敗し、StreamReader は失敗しないのに、両方の実装が既定で同じようにエンコーディングを処理するとドキュメントに記載されているのはなぜでしょうか?

4

1 に答える 1

5

それらは同じように機能しますが、同じ方法で使用していません...最初のケースでStreamReaderはパラメータとして a を渡し、2 番目のケースではファイルの場所を渡しています。

( など) でを作成するXmlReaderと、常に のエンコーディングが使用されます (XML 宣言の encoding 属性の値は無視されます)。パスまたはストリームを渡すだけの場合、XML 宣言で encoding 属性が使用されます。TextReaderStreamReaderTextReader

あなたの場合、宣言されたエンコーディングがファイルの実際のエンコーディングと一致しないと思われます。エンコーディングを UTF-8 として宣言しているが、実際には ANSI としてエンコードされている XML ファイルを作成することで、問題を再現できました。ファイルに非 ASCII 文字が含まれている場合、同じエラーが発生します。しかし、XML 宣言のエンコーディングを修正すると、正常に動作します...

于 2012-09-08T00:47:11.493 に答える