替换字符串c#中的控制字符

时间:2012-05-07 22:02:20

标签: c# string hex

我的数据库中的某些文本字段嵌入了错误的控制字符。在尝试序列化对象并在char 上获取xml错误时,我才注意到这一点。可能还有其他人。

如何使用C#替换它们?我觉得这样的事情会奏效:

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

但事实并非如此。 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:7)

字符串是不可变的 - 您需要重新分配:

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

答案 1 :(得分:2)

完全如上所述,字符串在C#中是不可变的。这意味着声明:

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

返回了你想要的字符串,但没有改变你给它的字符串。由于您没有在任何地方分配返回值,因此丢失了。这就是上面的陈述应该解决问题的原因:

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

如果你有一个经常对其进行更改的字符串,你可能会看一下StringBuilder对象,它与常规字符串非常相似,但它们是可变的,因此在某些情况下效率更高。

祝你好运!

-Craig

答案 2 :(得分:1)

您正在处理的更大问题是XmlSerialization往返问题。您以字符串开头,将其序列化为xml,然后将xml反序列化为字符串。我希望这总是会产生一个等同于第一个字符串的字符串,但如果该字符串包含控制字符,则反序列化会引发异常。

您可以通过将XmlTextReader而不是StreamReader传递给Deserialize方法来解决此问题。将XmlTextReader的Normalization属性设置为false

您还应该能够通过将字符串序列化为CDATA来解决此问题;有关详细信息,请参阅How do you serialize a string as CDATA using XmlSerializer?