Такие вещи, как "\ n" (кстати, не "/ n"), являются управляющими символами в языках программирования , а не по сути в тексте. (В частности, они зависят от языка программирования.)
Если хотите сделать
hello\r\nthis is a test\r\nnew line
формат как
hello
this is a test
new line
вам нужно будет выполнить синтаксический анализ самостоятельно, заменив "\ r" на возврат каретки, "\ n" на новую строку и т. Д., Обработав "\" как буквальный обратный слеш и т. Д. Обычно я обнаружил, что это простой парсер, который просто помнит, был ли предыдущий символ обратной косой чертой, достаточно ли это для большинства целей. Примерно так:
static string Unescape(string text)
{
StringBuilder builder = new StringBuilder(text.Length);
bool escaping = false;
foreach (char c in text)
{
if (escaping)
{
// We're not handling \uxxxx etc
escaping = false;
switch(c)
{
case 'r': builder.Append('\r'); break;
case 'n': builder.Append('\n'); break;
case 't': builder.Append('\t'); break;
case '\\': builder.Append('\\'); break;
default:
throw new ArgumentException("Unhandled escape: " + c);
}
}
else
{
if (c == '\\')
{
escaping = true;
}
else
{
builder.Append(c);
}
}
}
if (escaping)
{
throw new ArgumentException("Unterminated escape sequence");
}
return builder.ToString();
}
Существуют более эффективные способы сделать это (в основном, переход от обратной косой черты к обратной косой черте и добавление целых подстрок неэкранированного текста), но это просто.