Em C #, posso converter um valor de string em um literal de string, da maneira como o veria no código? Gostaria de substituir guias, novas linhas etc. por suas seqüências de escape.
Se este código:
Console.WriteLine(someString);
produz:
Hello
World!
Eu quero este código:
Console.WriteLine(ToLiteral(someString));
para produzir:
\tHello\r\n\tWorld!\r\n
@"..."
) de saída ?E o Regex.Escape (String) ?
fonte
Hello World?
emHello World\?
, mas que é um literal cadeia inválida.EDIT: Uma abordagem mais estruturada, incluindo todas as seqüências de escape para
string
s echar
s.Não substitui caracteres unicode pelo seu equivalente literal. Também não cozinha ovos.
fonte
@"[\a\b\f\n\r\t\v\\""/]"
e adicionadom_replaceDict.Add("/", @"\/");
paraJSON
.fonte
experimentar:
fonte
Implementação totalmente funcional, incluindo escape de caracteres não imprimíveis Unicode e ASCII. Não insere sinais "+" como a resposta de Hallgrim .
fonte
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
decidir se quer escapar ou se as pessoas que não falam ASCII não ficarão muito felizes.input = input ?? string.Empty;
como a primeira linha do método para que eu pudesse passarnull
e voltar em""
vez de uma exceção de referência nula.'
e agora você tem o que o Python lhe fornece imediatamenterepr(a_string)
:).A resposta de Hallgrim é excelente, mas as adições de "+", nova linha e recuo estavam quebrando a funcionalidade para mim. Uma maneira fácil de contornar isso é:
fonte
return literal
para torná-lo mais legível:literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
paraJSON
funcionalidade.Aqui está um pequeno aprimoramento para a resposta de Smilediver, que não escapará a todos os caracteres não-ASCII, mas somente estes são realmente necessários.
fonte
Pergunta interessante.
Se você não encontrar um método melhor, poderá sempre substituí-lo.
Caso esteja optando por isso, você pode usar esta lista de seqüências de escape em C # :
Essa lista pode ser encontrada nas Perguntas freqüentes sobre C # Quais seqüências de escape de caracteres estão disponíveis?
fonte
Existe um método para isso no pacote Microsoft.CodeAnalysis.CSharp de Roslyn no nuget:
Obviamente, isso não existia no momento da pergunta original, mas pode ajudar as pessoas que acabam aqui do Google.
fonte
Se as convenções JSON forem suficientes para as seqüências sem escape que você deseja escapar e você já usar
Newtonsoft.Json
em seu projeto (ele tem uma sobrecarga bastante grande), você poderá usar este pacote da seguinte maneira:fonte
fonte
Minha tentativa de adicionar o ToVerbatim à resposta aceita por Hallgrim acima:
fonte
A resposta de Hallgrim foi excelente. Aqui está um pequeno ajuste, caso você precise analisar caracteres em branco adicionais e quebras de linha com uma expressão regular ac #. Eu precisava disso no caso de um valor Json serializado para inserção nas folhas do google e tive problemas porque o código estava inserindo tabulações, +, espaços, etc.
fonte
Submeto minha própria implementação, que lida com
null
valores e deve ter melhor desempenho por usar tabelas de pesquisa de matriz, conversão hexadecimal manual eswitch
instruções de evitar .fonte
Código:
Resultado:
É isso que voce quer?
fonte