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 反序列化为字符串。人们期望这总是产生一个与第一个字符串等效的字符串,但如果该字符串包含控制字符,则反序列化会引发异常。

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

您还应该能够通过将字符串序列化为 CDATA 来解决此问题;请参阅如何使用 XmlSerializer 将字符串序列化为 CDATA?了解更多信息。

于 2012-05-08T02:38:47.633 回答