Nouvelle ligne:
string escapedNewline = @"\\n";
string cleanupNewLine = escapedNewline.Replace(@"\\n", Environment.NewLine);
OU
string cleanupNewLine = escapedNewline.Replace(@"\\n", "\n");
Tab:
string escapedTab = @"\\t";
string cleanupTab= escapedTab.Replace(@"\\t", "\t");
Notez l'absence de la chaîne littérale (par exemple je n'ai pas utilisé @ "\ t" parce que qui ne représenteront pas un onglet)
Vous pouvez également envisager Regular Expressions si vous devez remplacer une plage de différents modèles de chaîne.
Vous devriez probablement écrire une fonction d'utilité pour encapsuler le comportement commun au-dessus de tous les possibles Escape Sequences
Ensuite, vous écririez une Unit Tests pour couvrir chacun des cas, vous pouvez penser.
Comme vous rencontrez des bugs que vous ajouter d'autres tests unitaires pour couvrir les cas.
MISE À JOUR
Vous pouvez représenter un onglet dans le fichier XML avec une séquence de caractères spéciaux:
	
see this article
This article applique à SQL Server, mais peut-être pertinent pour C# aussi? Pour être absolument sûr, vous pouvez essayer de générer une chaîne avec un onglet et le mettre en XML (par programmation) et en utilisant XmlSerializer pour sérialiser ce fichier dans un fichier pour voir ce que la sortie est, alors vous pouvez être sûr que cela va fidèlement 'aller-retour' la corde avec l'onglet toujours dedans.
La classe à partir de laquelle vous recevez la chaîne fait quelque chose de non standard, les caractères ne sont donc plus des caractères de contrôle, ils ont été convertis (sans surprise) en une chaîne littérale plus longue. Vous devrez juste avoir un cas spécial pour les gérer. – rohancragg
cela semble familier !: http://www.infoqu.com/dev/c-programming/weeding-out-control-characters-in-c-30095-1/ – rohancragg
Peut être une question stupide, mais regardez-vous la valeur dans une fenêtre de surveillance? La fenêtre de surveillance ajoutera un \\, alors êtes-vous sûr que la chaîne est "\\ t"? – Geoff