我的数据库中的某些文本字段嵌入了错误的控制字符。在尝试序列化对象并在char 
和
上获取xml错误时,我才注意到这一点。可能还有其他人。
如何使用C#替换它们?我觉得这样的事情会奏效:
text.Replace('\x2', ' ');
但事实并非如此。 任何帮助表示赞赏。
答案 0 :(得分:7)
字符串是不可变的 - 您需要重新分配:
text = text.Replace('\x2', ' ');
答案 1 :(得分:2)
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?。