c# stringbuilder tostring проблема с двойными кавычками

У меня проблема при преобразовании строки из stringbuilder в строку. Проблема похожа на эту проблему, но немного отличается:

Это мой упрощенный код:

StringBuilder sb = new StringBuilder();
sb.Append("\"");
sb.Append("Hello World");
sb.Append("\"");

string test = sb.ToString();

Теперь в отладчике значение sb такое:

"Hello World"

В отладчике значение тестовой строки меняется на:

\"Hello World\"

При возврате значения тестовой строки обратно в браузер velue ВСЕ ЕЩЕ экранируется:

\"Hello World\"

Я попытался использовать замену строки:

test = test.Replace("\"", "");

не повезло, я попытался добавить символ ASCII вместо \", а также попробовал другое добавление

sb.Append('"');

Все это без везения. Может ли кто-нибудь указать мне правильное направление, почему я все еще получаю escape-символ и как от него избавиться.

Спасибо и ценим любой вклад.


person user281921    schedule 11.02.2013    source источник
comment
см. stackoverflow.com/questions/1928909/   -  person hatchet - done with SOverflow    schedule 11.02.2013
comment
Привет, использование @ не имело значения. Когда я использовал sb.Append(@); результирующие укусы все еще содержат \ в нем.   -  person user281921    schedule 11.02.2013
comment
Я также проверил результат, открыв URL-адрес в IE и сохранив его на диск. После открытия результата в блокноте косая черта все еще присутствует, так что это на 100% не проблема отладчика или часов.   -  person user281921    schedule 11.02.2013


Ответы (3)


Хорошо, кажется, что в WCF stringBuilder автоматически добавляет escape-кавычки. Это означает, что вы не можете уйти от этого. Кроме того, я собирался об этом все неправильно. Я пытался вернуть строку, в которой я должен был вернуть сериализованный объект JSON.

person user281921    schedule 19.02.2013

Я не вижу поведения, которое вы описываете. Экранирование двойных кавычек с обратной косой чертой должно работать. Следующий фрагмент кода

        var sb = new StringBuilder();
        sb.Append("Ed says, ");
        sb.Append("\"");
        sb.Append("Hello");
        sb.Append("\"");
        Console.WriteLine(sb.ToString());
        foreach (char c in sb.ToString()) Console.Write(c + "-");
        Console.ReadKey();

производит

Ed says, "Hello"
E-d- -s-a-y-s-,- -"-H-e-l-l-o-"-

Если вы получаете фактические символы обратной косой черты в окончательном отображении строки, это может быть добавлено чем-то после кода StringBuilder и ToString.

person hatchet - done with SOverflow    schedule 11.02.2013
comment
Хорошо, я не могу сделать ConsoleWrite, поскольку это веб-служба, но я сделал StreamWriter для локального файла. Вывод в порядке, нет escape-символов. Возникает вопрос, почему данные, отображаемые в окне браузера, содержат управляющие символы. - person user281921; 11.02.2013
comment
@Pete Пит, мне нужно посмотреть, как ты выводишь строку в свой HTML. В общем случае двойная кавычка должна быть закодирована как ". Возможно, проблема в том, что вы не кодируете свою строку, используя что-то вроде Html.Encode(). В этом случае вы должны создавать свою строку с помощью " вместо символа двойной кавычки. - person hatchet - done with SOverflow; 11.02.2013
comment
попробовал, но это переводится непосредственно в эту строку. html.encode по-прежнему создает escape-символ - person user281921; 13.02.2013
comment
Хорошо, кажется, что в WCF stringBuilder автоматически добавляет escape-кавычки. Это означает, что вы не можете уйти от этого. Кроме того, я собирался об этом все неправильно. Я пытался вернуть строку, в которой я должен был вернуть сериализованный объект JSON. - person user281921; 19.02.2013

Вы можете использовать дословный строковый литерал «@» перед строкой, а затем дважды ввести кавычки. Это исключает использование escape-последовательности в последовательности строк :)

StringBuilder sb = new StringBuilder();
sb.Append(@"""");
sb.Append("Hello World");
sb.Append(@"""");

string test = sb.ToString();
person NewZeroRiot    schedule 04.04.2015