Things like "\n" (not "/n" by the way) are escape characters in programming languages, not inherently in text. (In particular, they're programming-language dependent.)
If you want to make
hello\r\nthis is a test\r\nnew line
format as
hello
this is a test
new line
you'll need to do the parsing yourself, replacing "\r" with carriage return, "\n" with newline etc, handling "\" as a literal backslash etc. I've typically found that a simple parser which just remembers whether or not the previous character was a backslash is good enough for most purposes. Something like this:
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();
}
There are more efficient ways of doing it (skipping from backslash to backslash and appending whole substrings of non-escaped text, basically) but this is simple.