2

データベースの一部のテキスト フィールドに不適切な制御文字が埋め込まれています。オブジェクトをシリアライズしようとして char. おそらく他にもあります。

C# を使用してそれらを置き換えるにはどうすればよいですか? 私はこのようなものがうまくいくと思った:

text.Replace('\x2', ' ');

しかし、そうではありません。どんな助けでも感謝します。

4

3 に答える 3

7

文字列は不変です - 再割り当てする必要があります:

text = text.Replace('\x2', ' ');
于 2012-05-07T22:05:05.220 に答える
2

上で述べたように、C# では文字列は不変です。これは、次のステートメントを意味します。

text.Replace('\x2', ' '); 

必要な文字列を返しましたが、指定した文字列を変更しませんでした。戻り値をどこにも割り当てていないため、失われました。そのため、上記のステートメントで問題を解決する必要があります。

text = text.Replace('\x2', ' '); 

頻繁に変更する文字列がある場合は、通常の文字列と同じように機能する StringBuilder オブジェクトを調べることができますが、変更可能であるため、状況によってははるかに効率的です。

幸運を!

-クレイグ

于 2012-05-07T22:10:03.160 に答える
1

あなたが扱っているより大きな問題は、XmlSerialization ラウンド トリップの問題です。文字列から始めて、それを xml にシリアル化し、次に xml を文字列に逆シリアル化します。これは常に最初の文字列と同等の文字列になると予想されますが、文字列に制御文字が含まれている場合、デシリアライゼーションは例外をスローします。

メソッドに aのXmlTextReader代わりにan を渡すことで、これを修正できます。XmlTextReader のNormalizationプロパティを に設定します。StreamReaderDeserializefalse

この問題は、文字列を CDATA としてシリアル化することでも解決できるはずです。XmlSerializer を使用して文字列を CDATA としてシリアル化する方法を参照してください。詳細については。

于 2012-05-08T02:38:47.633 に答える