2016-12-19 9 views
0

に無効な文字が私はUTF-8でエンコードされたXMLなXmlException:XMLリーダーのバージョンの下に使用する場合、所与の符号化

<?xml version="1.0" encoding="UTF-8"?> 

を有します。私はこれがXMLファイルを解析するためにUTF-8エンコーディングを使用していると仮定しています。

using (XmlReader reader = XmlReader.Create(inputUri)) 

私は例外以下になります。 XMLReaderの

using (XmlReader reader = XmlReader.Create(new StreamReader(inputUri,Encoding.UTF8))) 

のバージョンの下に使用している場合

System.Xml.XmlException occurred 
    HResult=-2146232000 
    LineNumber=18750 
    LinePosition=13 
    Message=Invalid character in the given encoding. Line 18750, position 13. 

しかし、XMLが正常に解析されます。なぜ、これらの2つのバージョンの間にこのような違いがあるのか​​は、同じエンコーディングを使用して、指定されたXMLファイルを解析するのですか?

PS:最初のバージョンではUTF-8エンディングが使用されていることは間違いありません。

は以下インスタンス最初のバージョンによって返されるXmlTextReaderImpl.csからの抜粋です。

 private void SetupEncoding(Encoding encoding) { 
      if (encoding == null) { 
       Debug.Assert(ps.charPos == 0); 
       ps.encoding = Encoding.UTF8; 
       ps.decoder = new SafeAsciiDecoder(); // This falls back to UTF-8 decoder 
      } 
} 
+0

使用している.netバージョンはどれですか? – Prajwal

+0

.Net Framework 4.5 – Sameer

答えて

1

私はmsdn forumで答えを得ました。

XMLフォーマットが壊れているため、「XMLReaderが違法のような任意の不正な文字をマークする。

を第二のケースでは、それが範囲内に符号化することによって定義されていないデータに遭遇したときのStreamReaderは、汎用テキストリーダーであるため文字をreplacement fallbackに置き換えます。したがって、結果のストリームをXmlReaderに渡すと、現在表示できるすべての文字がエンコーディングで定義された有効範囲に入ります。

0
using (XmlReader reader = XmlReader.Create(inputUri)) 

上記XmlReaderのエンコーディングを使用し、ファイルのエンコーディング宣言を無視します。

例外が発生するのはなぜですか。それで、UTF-8エンコーディングを使用すると、2番目の方法が機能します。

N.B.私と思うデフォルトのエンコーディングはUTF-16です

関連する問題