Как заменить текст в строке в C #? - PullRequest
1 голос
/ 16 декабря 2009

У меня есть этот конкретный кусок кода, но он не работает.

text = text.Replace("\xEF\xBF\xBD", "?");

Кто-нибудь знает, как заменить текст "\xEF\xBF\xBD" на "?" в C # String.

Ответы [ 2 ]

14 голосов
/ 16 декабря 2009

Вы должны избежать обратной косой черты.

text = text.Replace("\\xEF\\xBF\\xBD", "?");

Кроме того, вы можете экранировать всю строку с помощью символа @:

text = text.Replace(@"\xEF\xBF\xBD", "?");
8 голосов
/ 16 декабря 2009

Короткий ответ (немного догадываясь):

text = text.Replace("\xFFFD", "?");

И узнайте о кодировках Unicode и , особенно utf-8.

Длинный ответ:

Ну, вы имеете в виду буквально "\ xEF \ xBF \ xBD"? То есть строка, состоящая из следующих символов:

backslash, uppercase latin character E, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character D

Тогда ответ будет:

text = text.Replace(@"\xEF\xBF\xBD", "?");

Или есть последовательности символов, которые описываются escape-последовательностью C # "\ xEF \ xBF \ xBD", а именно:

LATIN SMALL LETTER I WITH DIAERESIS, INVERTED QUESTION MARK, VULGAR FRACTION ONE HALF

(который будет отображаться как "�)? Тогда ваш код будет правильным:

text = text.Replace("\xEF\xBF\xBD", "?");

Или вы хотите заменить байт последовательность

EF BF BD

(что на самом деле может быть представлением utf-8 символа замены Unicode, FFFD, который часто отображается как " ")?

Это просто дикое предположение, но интуиция говорит, что вы действительно хотите достичь последнего. Теперь строка .Net содержит символы, а не байты, но при условии, что вы прочитали эти байты, например, из файла как utf-8 ответ будет:

text = text.Replace("\xFFFD", "?");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...