繁体   English   中英

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

[英]Replace control character in string c#

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

如何使用C#替换它们? 我认为这样的事情会起作用:

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

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

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

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

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

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

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

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

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

祝好运!

-Craig

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM