2011-08-03 7 views
2

ここではC#のXMLシリアル化の例の多くは多くのXMLシリアル化の例で特定の文字が取り除かれるのはなぜですか?

xml = xml.Substring(xml.IndexOf(Convert.ToChar(60))); 
xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1)); 

のようなコードが含まれ、私はこれを理解しては<と>周りの任意の(無効/印字不可能)文字を破棄されたが、なぜこれらの文字は、最初の場所に存在していますか?

XmlTextWriterでEncoding.Unicodeを使用するUTF16を想定します。

+1

これは、実際には、最初の '<'の前と最後の '>'の前にすべての文字(「印刷不可/無効」以外の文字)を破棄します。あなたはそれを実行する例を見たことがありますか? –

+0

元のコーダーがどこに見つかりましたか分かりませんが、[xmlserializer convert.tochar(62)](http://www.google.com.au/search?q=xmlserializer+convert)を検索することで多くの例が見つかります。 tochar \(62 \)) –

答えて

2

使用してUTF16を想定することEncoding.UnicodeにXmlTextWriterを追加しました。

UTF形式は、XmlTextWriterの構築と同じくらい実際にはこれのプレーヤーではありません。 XmlTextWriterにxml変数を含むStringReaderが渡された場合、xmlが最初にディスクから読み取られた方法に問題が存在する可能性があります。

テキストファイルには、多くの場合、BOM(Byte Order Mark)と呼ばれるエンコーディングプリアンブルが含まれています。間違って読み込まれると、ファイルの内容の前にいくつかの「奇妙な」文字が表示されます。

誤って読み込まれたテキストファイルからBOMを削除しようとすると、貧しい人が試みたコードがあると思います。

+0

しかし、なぜ最後の '>'の後にすべてのデータを破棄するのですか? –

+0

これはXmlSerializerに渡されたオブジェクトです。いつでもディスクにヒットしませんでした –

+0

http://stackoverflow.com/questions/660440/c-xml-serialization-leading-question-marksが答えをバックアップするようです。 XMLをSQL Serverに送信していますので、そこでエンコードを確認します。 –

1

これは、私が知る限り、フォルツルの法則の一例です。これは、「ロバストネス原理」としても知られています。そこには何もあるべきではありませんが、場合によってはそれを取り除くこともできます。

あなたが送信した内容を保守してください。あなたはまた、余分なテキストが実際に必要なことを無視して以来、XMLの仕様を確認したいことがあり

http://en.wikipedia.org/wiki/Robustness_Principle

受け入れるものにリベラルだけではなく、丁寧な利便

関連する問題