Специальная последовательность Замены в строке в C#

#c# #.net #string #replace

Вопрос:

У меня есть строка, как показано ниже

 Testingu001cTesting Testing Testingu001cTesting
 

Когда я пытаюсь отправить этот ответ Http.Response , я получаю что-то вроде (квадратная коробка) в почтальоне.

Я хочу заменить u001c на u{001c} .

Я попытался сделать следующее,

  • myText.Replace("u001c", @"\u{001c}"); — это становится все более похожим на это \\u{001c}
  • myText.Replace("u001c", @"u{001c}"); — это становится все более похожим на это u{001c}
  • myText.Replace("u001c", @"u{001c}"); — это становится все более похожим на это \u{001c}
  • myText.Replace("u001c", @"u{001c}"); — его заменяют вот так (квадратная коробка)

В чем моя ошибка?

Комментарии:

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

2. Я предполагаю, что u001c это один символ («разделитель полей»), указанный в его escape-последовательности кодовой точки Юникода (шестнадцатеричная 1C, десятичная 28), а не шесть символов, начинающихся с фактической обратной косой черты? Это не «печатный символ», поэтому почтальон не может его отобразить

Ответ №1:

Символ » » — это особый символ. Если вы хотите включить этот символ в строку, вы должны использовать экранирующий символ, который также является»». Так что, если вы хотите иметь «c:a.txt» тебе это нужно, чтобы написать это так «c:\a.txt». Но это затрудняет обработку адресов и URL-адресов, так как в них может быть много»». Поэтому, когда вы хотите использовать адрес, вы можете поставить @ перед строкой и позволить компилятору добавить экранирующий символ. Короче говоря, когда вы используете@»», компилятор добавляет второй. Если вы хотите заменить «u001c» на «u{001c}», вам нужно сделать, как показано ниже:

 myText.Replace("\u001c", "\u{001c}");