2012-05-07 4 views
2

Некоторые текстовые поля в моей базе данных содержат неправильные управляющие символы. Я заметил это только при попытке сериализации объекта и получения ошибки xml на char  и . Возможно, есть и другие.Заменить управляющий символ в строке C#

Как заменить их на C#? Я думал, что-то вроде этого будет работать:

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

но это не так. Любая помощь приветствуется.

ответ

7

Строки неизменны - вам нужно переназначить:

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

Спасибо, я должен был это знать! – Graeme

2

точно так, как было сказано выше, строки являются неизменяемыми в C#. Это означает, что в заявлении:

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

возвратил нужную строку, но не изменил строку, которую вы ей дали. Поскольку вы не присвоили возвращаемое значение нигде, оно было потеряно. Поэтому утверждение выше должно решить проблему:

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

Если у вас есть строка, что вы часто делаете изменения, вы можете посмотреть на объекте StringBuilder, который работает очень как обычные строки, но они изменчивы , и, следовательно, намного эффективнее в некоторых ситуациях.

Удачи вам!

-Craig

1

Чем больше проблемы, которую вы имеете дело с является XmlSerialization круглой проблемы поездки. Вы начинаете с строки, вы сериализуете ее в xml, а затем десериализуете xml в строку. Можно ожидать, что это всегда приводит к строке, эквивалентной первой строке, но если строка содержит управляющие символы, десериализация выдает исключение.

Вы можете исправить это, передав XmlTextReader вместо StreamReader в метод Deserialize. Установите свойство Normalization XmlTextReader на false.

Вы также должны решить эту проблему, выполнив сериализацию строки как CDATA; см. How do you serialize a string as CDATA using XmlSerializer? для получения дополнительной информации.

Смежные вопросы