En C #, ¿puedo convertir un valor de cadena en un literal de cadena, como lo vería en el código? Me gustaría reemplazar pestañas, nuevas líneas, etc. con sus secuencias de escape.
Si este código:
Console.WriteLine(someString);
produce:
Hello
World!
Quiero este código:
Console.WriteLine(ToLiteral(someString));
para producir:
\tHello\r\n\tWorld!\r\n
@"..."
literales verbatim ( )?¿Qué pasa con Regex.Escape (String) ?
fuente
Hello World?
enHello World\?
, pero ese es un literal de cadena no válido.EDITAR: Un enfoque más estructurado, que incluye todas las secuencias de escape para
string
sychar
s.No reemplaza los caracteres unicode con su equivalente literal. Tampoco cocina huevos.
fuente
@"[\a\b\f\n\r\t\v\\""/]"
y agregadom_replaceDict.Add("/", @"\/");
paraJSON
.fuente
tratar:
fuente
Implementación totalmente funcional, incluido el escape de caracteres no imprimibles Unicode y ASCII. No inserta signos "+" como la respuesta de Hallgrim .
fuente
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
decidir si escapar o las personas que no hablan ASCII no estarán muy contentas.input = input ?? string.Empty;
como la primera línea del método para poder pasarnull
y volver en""
lugar de una excepción de referencia nula.'
y ahora tiene lo que Python le da de fábrica conrepr(a_string)
:).La respuesta de Hallgrim es excelente, pero las adiciones de "+", nueva línea y sangría me estaban rompiendo la funcionalidad. Una forma fácil de evitarlo es:
fuente
return literal
para hacerla más legible:literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
para laJSON
funcionalidad.Aquí hay una pequeña mejora para la respuesta de Smilediver, no escapará a todos los caracteres sin ASCII, pero solo estos son realmente necesarios.
fuente
Interesante pregunta.
Si no puede encontrar un método mejor, siempre puede reemplazarlo.
En caso de que esté optando por él, puede usar esta Lista de secuencia de escape de C # :
Esta lista se puede encontrar en C # Preguntas frecuentes ¿Qué secuencias de escape de caracteres están disponibles?
fuente
Hay un método para esto en el paquete Microsoft.CodeAnalysis.CSharp de Roslyn en nuget:
Obviamente, esto no existía en el momento de la pregunta original, pero podría ayudar a las personas que terminan aquí desde Google.
fuente
Si las convenciones JSON son suficientes para las cadenas sin escape que desea escapar y que ya usa
Newtonsoft.Json
en su proyecto (tiene una sobrecarga bastante grande), puede usar este paquete de la siguiente manera:fuente
fuente
Mi intento de agregar ToVerbatim a la respuesta aceptada de Hallgrim arriba:
fuente
La respuesta de Hallgrim fue excelente. Aquí hay un pequeño ajuste en caso de que necesite analizar caracteres de espacio en blanco adicionales y saltos de línea con una expresión regular ac #. Necesitaba esto en el caso de un valor Json serializado para la inserción en las hojas de Google y tuve problemas ya que el código estaba insertando pestañas, +, espacios, etc.
fuente
Presento mi propia implementación, que maneja los
null
valores y debería ser más eficiente debido al uso de tablas de búsqueda de matriz, conversión hexadecimal manual y evitarswitch
declaraciones.fuente
Código:
Salida:
¿Es esto lo que quieres?
fuente