5

アプリケーションが無効な XML を解析しようとしたために発生した、クライアントから報告された奇妙な問題のトラブルシューティングを行っています。根本的な原因は、XML 文字列がどのようにエンコードされてからデコードされるかに関係していると思います。XML文字列(最初から有効であることがわかっています)を取得し、それをバイト配列に変換して readonly でラップする内部APIがありますMemoryStream。次に、ストリームが文字列に変換されてから に渡されXDocument.Parse(string)ます。後者の呼び出しは失敗し、「ルート レベルのデータが無効です。行 1、位置 1」と表示されます。とにかく、根本的な原因は、文字列をエンコードしてからデコードする方法に関係していると思います。実際、デバッグ コードの次の行は、渡されたものとは異なる文字列を返します。

Encoding.Default.GetString(Encoding.Default.GetBytes(GetMeAnXmlString())));

途中で使用Encoding.Defaultしてから元に戻すと、最初に使用したものとは異なる文字列が生成されます。それはクレイジーです。何か案は?

ノート:

XML を含むストリームを取得する、変更できない API を使用しているため、Encoding.Default. そうすることで、すべてが正常に機能しているクライアントの生産上の問題 (別名ショーストッパー) のリスクが生じます。

4

1 に答える 1

7

要するに、Weeble が言及したコード ページの側面のため、Encoding.Default は大ざっぱです。

http://msdn.microsoft.com/en-us/library/system.text.encoding.default%28v=vs.110%29.aspx およびhttp://blogs.msdn.com/b/shawnste/archive/ 2005/03/15/don-t-use-encoding-default.aspx

Encoding.Unicode または Encoding.UTF8 を使用することを決定した方がよいでしょう。

于 2013-11-12T22:45:00.200 に答える