2012-02-23 3 views
2

Можно создать дубликат:
Can I convert a C# string value to an escaped string literalКак заставить Console.WriteLine() печатать дословные строки?

Как я могу напечатать строку (через Console.WriteLine()), что любые/все управляющие последовательности, которые могут существовать в строке печатается дословно ?

Пример:

string s = "This \r\n has \t special \\ characters."; 
Console.WriteLine(s); 

/* Output (I don't want this) 

This 
has special \ characters. 

*/ 

Я хочу выход следующим образом:

This \r\n has \t special \\ characters. 

Обратите внимание, что в моем приложении я получаю строку (которая содержит управляющие последовательности) из третьей стороны - т.е. Если бы я сам создавал струну, я знал, что могу просто сделать

string s = @"This \r\n has \t special \\ characters."; 
+0

Итак, мы знаем, что вы хотите вывести для символов 'xD',' xA', '' x9' и x5C', но то, что вы хотите для всех остальных? Если вы хотите интерпретировать компилятор C#, преследуйте ссылку? Dupe выше; если нет, нам понадобится более подробная спецификация, я думаю. – AakashM

+0

@VBRonPaulFan - Спасибо за хедз-ап, что это дубликат. Ссылка, которую вы дали, - это то, что я искал. – Jed

ответ

4

Единственный способ сделать это - самостоятельно декодировать escape-последовательности и поместить их обратно как литералы в строку. Для этого потребуется некоторая функция преобразования. Например

string EscapeIt(string value) { 
    var builder = new StringBuilder(); 
    foreach (var cur in value) { 
    switch (cur) { 
     case '\t': 
     builder.Append(@"\t"); 
     break; 
     case '\r': 
     builder.Append(@"\r"); 
     break; 
     case '\n': 
     builder.Append(@"\n"); 
     break; 
     // etc ... 
     default: 
     builder.Append(cur); 
     break; 
    } 
    } 
    return builder.ToString(); 
} 
+0

Может также использовать Regex, но основной принцип тот же. Вам также нужно убежать \, чтобы быть \\. – Servy

+0

@downvoter помочь объяснить? – JaredPar

+0

@Servy 'Regex' - довольно тяжелое решение для чего-то, что можно сделать с помощью быстрого переключателя/футляра. Примечание. Мне не нужно esacpe \ in my solutin, потому что я использовал строки verbatim. – JaredPar

0

Вам нужно будет надеть rt двоичные символы в бегство себя. Не должно быть трудно сделать.

+0

На самом деле у VBRonPaulFan есть то, что вы хотите в его ссылке. –