Kann ich in C # einen Zeichenfolgenwert in ein Zeichenfolgenliteral konvertieren, wie ich es im Code sehen würde? Ich möchte Tabulatoren, Zeilenumbrüche usw. durch ihre Escape-Sequenzen ersetzen.
Wenn dieser Code:
Console.WriteLine(someString);
produziert:
Hello
World!
Ich möchte diesen Code:
Console.WriteLine(ToLiteral(someString));
produzieren:
\tHello\r\n\tWorld!\r\n
@"..."
) Literale auszugeben ?Was ist mit Regex.Escape (String) ?
quelle
Hello World?
in verwandelnHello World\?
, aber das ist ein ungültiges String-Literal.EDIT: Ein strukturierterer Ansatz, einschließlich aller Escape-Sequenzen für
string
s undchar
s.Ersetzt Unicode-Zeichen nicht durch ihre wörtliche Entsprechung. Kocht auch keine Eier.
quelle
@"[\a\b\f\n\r\t\v\\""/]"
und hinzugefügtm_replaceDict.Add("/", @"\/");
fürJSON
.quelle
Versuchen:
quelle
Voll funktionsfähige Implementierung, einschließlich Escapezeichen für nicht druckbare Unicode- und ASCII-Zeichen. Fügt keine "+" - Zeichen wie Hallgrims Antwort ein .
quelle
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
, um zu entscheiden, ob Sie entkommen möchten, oder Personen, die kein ASCII sprechen, werden nicht sehr glücklich sein.input = input ?? string.Empty;
als erste Zeile der Methode hinzugefügt , damit ich anstelle einer Nullreferenzausnahme übergebennull
und zurückkehren kann""
.'
und jetzt haben Sie das, was Python Ihnen sofort mitrepr(a_string)
:) gibt.Die Antwort von Hallgrim ist ausgezeichnet, aber die Ergänzungen "+", Zeilenumbruch und Einzug haben die Funktionalität für mich beeinträchtigt. Ein einfacher Weg, dies zu umgehen, ist:
quelle
return literal
, um die Lesbarkeitliteral = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
für dieJSON
Funktionalität hinzugefügt .Hier ist eine kleine Verbesserung für Smiledivers Antwort: Es wird nicht allen Nicht-ASCII-Zeichen entgehen, sondern nur diese werden wirklich benötigt.
quelle
Interessante Frage.
Wenn Sie keine bessere Methode finden, können Sie diese jederzeit ersetzen.
Falls Sie sich dafür entscheiden, können Sie diese C # Escape-Sequenzliste verwenden :
Diese Liste finden Sie in den häufig gestellten Fragen zu C #. Welche Zeichen-Escape-Sequenzen sind verfügbar?
quelle
Es gibt eine Methode dafür in Roslyns Microsoft.CodeAnalysis.CSharp- Paket auf nuget:
Offensichtlich gab es dies zum Zeitpunkt der ursprünglichen Frage noch nicht, aber es könnte Menschen helfen, die von Google hierher kommen.
quelle
Wenn JSON-Konventionen für die nicht maskierten Zeichenfolgen ausreichen, die maskiert werden sollen, und Sie sie bereits
Newtonsoft.Json
in Ihrem Projekt verwenden (es hat einen ziemlich großen Overhead), können Sie dieses Paket wie folgt verwenden:quelle
quelle
Mein Versuch, ToVerbatim zu Hallgrims oben akzeptierter Antwort hinzuzufügen :
quelle
Hallgrims Antwort war ausgezeichnet. Hier ist eine kleine Änderung für den Fall, dass Sie zusätzliche Leerzeichen und Zeilenumbrüche mit einem regulären Ausdruck ac # analysieren müssen. Ich brauchte dies im Fall eines serialisierten Json-Werts zum Einfügen in Google Sheets und bekam Probleme, da der Code Tabulatoren, +, Leerzeichen usw. einfügte.
quelle
Ich reiche meine eigene Implementierung ein, die
null
Werte verarbeitet und aufgrund der Verwendung von Array-Nachschlagetabellen, der manuellen Hex-Konvertierung und der Vermeidung vonswitch
Anweisungen leistungsfähiger sein sollte .quelle
Code:
Ausgabe:
Ist das was du willst?
quelle