En C #, puis-je convertir une valeur de chaîne en un littéral de chaîne, comme je le verrais dans le code? Je voudrais remplacer les tabulations, les nouvelles lignes, etc. par leurs séquences d'échappement.
Si ce code:
Console.WriteLine(someString);
produit:
Hello
World!
Je veux ce code:
Console.WriteLine(ToLiteral(someString));
produire:
\tHello\r\n\tWorld!\r\n
@"..."
littéraux verbatim ( )?Qu'en est-il de Regex.Escape (String) ?
la source
Hello World?
enHello World\?
, mais c'est un littéral de chaîne invalide.EDIT: Une approche plus structurée, incluant toutes les séquences d'échappement pour
string
s etchar
s.Ne remplace pas les caractères unicode par leur équivalent littéral. Ne fait pas cuire les œufs non plus.
la source
@"[\a\b\f\n\r\t\v\\""/]"
et ajoutém_replaceDict.Add("/", @"\/");
pourJSON
.la source
essayer:
la source
Implémentation pleinement opérationnelle, y compris l'échappement des caractères non imprimables Unicode et ASCII. N'insère pas de signe "+" comme la réponse d'Hallgrim .
la source
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
pour décider si vous voulez y échapper, ou les personnes qui ne parlent pas ASCII ne seront pas très heureuses.input = input ?? string.Empty;
comme première ligne de la méthode afin que je puisse passernull
et récupérer au""
lieu d'une exception de référence nulle.'
et vous avez maintenant ce que Python vous offre avecrepr(a_string)
:).La réponse de Hallgrim est excellente, mais les ajouts "+", la nouvelle ligne et le retrait étaient une rupture de fonctionnalité pour moi. Un moyen simple de le contourner est:
la source
return literal
pour le rendre plus lisible:literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
pour laJSON
fonctionnalité.Voici une petite amélioration pour la réponse de Smilediver, elle n'échappera pas à tous les caractères sans ASCII mais seuls ceux-ci sont vraiment nécessaires.
la source
Question interessante.
Si vous ne trouvez pas de meilleure méthode, vous pouvez toujours la remplacer.
Si vous optez pour cette option, vous pouvez utiliser cette liste de séquences d'échappement C # :
Cette liste se trouve dans la foire aux questions C # Quelles séquences d'échappement de caractères sont disponibles?
la source
Il existe une méthode pour cela dans le package Microsoft.CodeAnalysis.CSharp de Roslyn sur nuget:
Évidemment, cela n'existait pas au moment de la question d'origine, mais pourrait aider les personnes qui se retrouvent ici de Google.
la source
Si les conventions JSON sont suffisantes pour les chaînes non échappées que vous souhaitez obtenir échappées et que vous utilisez déjà
Newtonsoft.Json
dans votre projet (il a une surcharge assez importante), vous pouvez utiliser ce package comme suit:la source
la source
Ma tentative d'ajouter ToVerbatim à la réponse acceptée de Hallgrim ci-dessus:
la source
La réponse d'Hallgrim était excellente. Voici un petit ajustement au cas où vous auriez besoin d'analyser des espaces et des sauts de ligne supplémentaires avec une expression régulière ac #. J'en avais besoin dans le cas d'une valeur Json sérialisée pour l'insertion dans des feuilles Google et j'ai rencontré des problèmes car le code insérait des tabulations, +, des espaces, etc.
la source
Je soumets ma propre implémentation, qui gère les
null
valeurs et devrait être plus performante en raison de l'utilisation des tables de recherche de tableaux, de la conversion hexadécimale manuelle et de l'évitement desswitch
instructions.la source
Code:
Production:
c'est ce que tu veux?
la source