我的数据库中的某些文本字段嵌入了错误的控制字符。我只是在尝试序列化对象并在 char
和
. 可能还有其他人。
如何使用 C# 替换它们?我认为这样的事情会起作用:
text.Replace('\x2', ' ');
但事实并非如此。任何帮助表示赞赏。
字符串是不可变的 - 您需要重新分配:
text = text.Replace('\x2', ' ');
正如上面所说,字符串在 C# 中是不可变的。这意味着声明:
text.Replace('\x2', ' ');
返回了你想要的字符串,但没有改变你给它的字符串。由于您没有在任何地方分配返回值,因此它丢失了。这就是为什么上面的语句应该解决问题的原因:
text = text.Replace('\x2', ' ');
如果您有一个经常更改的字符串,您可能会查看 StringBuilder 对象,它的工作方式与常规字符串非常相似,但它们是可变的,因此在某些情况下效率更高。
祝你好运!
-克雷格
您正在处理的更大问题是 XmlSerialization 往返问题。从字符串开始,将其序列化为 xml,然后将 xml 反序列化为字符串。人们期望这总是产生一个与第一个字符串等效的字符串,但如果该字符串包含控制字符,则反序列化会引发异常。
您可以通过将 aXmlTextReader
而不是 a传递StreamReader
给Deserialize
方法来解决此问题。将 XmlTextReader 的Normalization属性设置为false
。
您还应该能够通过将字符串序列化为 CDATA 来解决此问题;请参阅如何使用 XmlSerializer 将字符串序列化为 CDATA?了解更多信息。