2017-04-21 62 views
0

XmlDocument.Loadを使用して、タイ語でいくつかの文字を含むXMLファイルの内容をロードしています。アプリケーションは、次の例外を除いてエラーになります。System.Xml.XmlException:指定されたエンコーディングで無効な文字

System.Xml.XmlException:指定されたエンコーディングの文字が無効です。 System.Xml.XmlTextReaderImpl.GetChars(のInt32 maxCharsCountでSystem.Xml.XmlTextReaderImpl.InvalidCharRecoveryでSystem.Xml.XmlTextReaderImpl.Throw(例外e) のライン2、位置82(のInt32 & bytesCount、 のInt32 & charsCount) ) System.Xml.XmlTextReaderImpl.FinishPartialValue()で& endposの、 のInt32 & outOrChars) System.XmlのでSystem.Xml.XmlTextReaderImpl.ParseText(のInt32 & startPosでSystem.Xml.XmlTextReaderImpl.ReadData()、のInt32で.XmlTextReaderImpl.get_Value()at System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)at XMLファイルには、このコンテンツ enter image description here

お知らせ閉じる前に奇妙な文字で始まる System.Xml.XmlDocument.Load(XmlReaderのリーダー)

でSystem.Xml.XmlLoader.LoadDocSequence(常にXmlDocument parentDoc)タグ。このコンテンツはサードパーティ製のもので、ファイル/コンテンツにアクセスすることはできません。

私の質問は以下のとおりです。

    コンテンツに登場する不思議なキャラクターがサードパーティプロバイダからの私の に送られるのはなぜ
  1. 処理する前にそのコンテンツを変更するための アクセス権がないため、正常に完了する方法はありますか(XmlDocumentに読み込みます)。
+1

XmlReaderSettings.CheckCharacters = falseを使用します。しかし、より良い - 第三者に連絡して問題を解決するように依頼してください。有効なxmlではないようです。 – Evk

+0

唯一の有用な推奨事項は、SOのジョブセクションのチェックを開始することです...そのサードパーティーと協力して有効なXMLを返すことができない場合、ドキュメントを正しく再構成できないため、完全にスタックされています(文書内のその他のものはどう思いますか?)実際に、 HTMLAgilityPackを使用して、そのテキストを代わりに読み込むか、ストリームから無効なUTF8バイトを手動で取り除くのと同じように... –

+0

実際にサードパーティの問題であり、ファイルが存在することを確認してくださいあなた自身によって損なわれていない(例えば、utf-8以外のエンコーディングを間違っていると仮定して読むことによって)。 – Evk

答えて

0

第三者から提供されたデータは、有効なXMLではありません。私は、第三者に有効なXMLを提供するか、XMLから無効な文字を取り除いてできることを処理するという2つの解決策しかないと思います。あなたはこれを行うことができます...

string invalidXML = File.ReadAllText(path); 
var validXml = invalidXML.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray() 
if (validXml != invalidXML) 
    // log the invalid 

// process (what you can in) the validXml 
0

タイ文字であることを確信している場合は、正しいデータエンコードを読み込みます。

タイの文字エンコーディングがある - ISO 8859-11

ですから、ドキュメント・ロードの道の下に試してみてくださいできます、あなたが第三者に話をする必要があるかもしれない最初の質問へ

xmlDoc.Load(new StreamReader(File.Open("YourXMLFile.xml"), 
         Encoding.GetEncoding("iso-8859-11"))); 

回答と尋ねますそれらのソースコードを調べて、生成されたXMLにこれらの不要な文字が表示される理由を調べます。

関連する問題