Dalam C #, dapatkah saya mengonversi nilai string ke string literal, seperti cara saya melihatnya dalam kode? Saya ingin mengganti tab, baris baru, dll. Dengan urutan pelarian mereka.
Jika kode ini:
Console.WriteLine(someString);
menghasilkan:
Hello
World!
Saya ingin kode ini:
Console.WriteLine(ToLiteral(someString));
untuk menghasilkan:
\tHello\r\n\tWorld!\r\n
@"..."
) literal?Bagaimana dengan Regex.Escape (String) ?
sumber
Hello World?
menjadiHello World\?
, tetapi itu adalah string literal yang tidak valid.EDIT: Pendekatan yang lebih terstruktur, termasuk semua urutan pelarian untuk
string
s danchar
s.Tidak mengganti karakter unicode dengan padanan literalnya. Juga tidak memasak telur.
sumber
@"[\a\b\f\n\r\t\v\\""/]"
dan ditambahkanm_replaceDict.Add("/", @"\/");
untukJSON
.sumber
mencoba:
sumber
Implementasi yang berfungsi penuh, termasuk melarikan diri dari Unicode dan karakter ASCII yang tidak dapat dicetak. Tidak menyisipkan tanda "+" seperti jawaban Hallgrim .
sumber
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
untuk memutuskan apakah akan menghindarinya, atau orang yang tidak berbicara ASCII tidak akan sangat senang.input = input ?? string.Empty;
sebagai baris pertama dari metode ini sehingga saya bisa lulusnull
dan mendapatkan kembali,""
bukan pengecualian referensi nol.'
dan sekarang Anda memiliki apa yang Python berikan kepada Anda di luar kotak denganrepr(a_string)
:).Jawaban Hallgrim sangat bagus, tetapi penambahan "+", baris baru, dan lekukan merusak fungsi bagi saya. Cara mudah untuk mengatasinya adalah:
sumber
return literal
membuatnya lebih mudah dibaca:literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
untukJSON
fungsionalitas.Inilah sedikit perbaikan untuk jawaban Smilediver, itu tidak akan luput dari semua karakter tanpa ASCII tetapi hanya ini yang benar-benar dibutuhkan.
sumber
Pertanyaan menarik.
Jika Anda tidak dapat menemukan metode yang lebih baik, Anda selalu dapat mengganti.
Jika Anda memilih untuk itu, Anda bisa menggunakan C # Escape Sequence List ini :
Daftar ini dapat ditemukan di C # Pertanyaan Yang Sering Diajukan Apa urutan pelarian karakter yang tersedia?
sumber
Ada metode untuk ini dalam paket Microsoft.CodeAnalysis.CSharp Roslyn di nuget:
Jelas ini tidak ada pada saat pertanyaan awal, tetapi dapat membantu orang-orang yang berakhir di sini dari Google.
sumber
Jika konvensi JSON cukup untuk string yang tidak terhindar yang ingin Anda lepas dan Anda sudah menggunakan
Newtonsoft.Json
dalam proyek Anda (memiliki overhead yang cukup besar), Anda dapat menggunakan paket ini seperti berikut:sumber
sumber
Upaya saya menambahkan ToVerbatim ke jawaban Hallgrim yang diterima di atas:
sumber
Jawaban Hallgrim sangat bagus. Berikut ini adalah perubahan kecil jika Anda perlu mengurai karakter spasi tambahan dan linebreak dengan ekspresi reguler ac #. Saya membutuhkan ini dalam kasus nilai Json serial untuk dimasukkan ke dalam lembar google dan mengalami masalah ketika kode itu memasukkan tab, +, spasi, dll.
sumber
Saya mengirimkan implementasi saya sendiri, yang menangani
null
nilai-nilai dan harus lebih berprestasi karena menggunakan tabel pencarian array, konversi hex manual, dan menghindariswitch
pernyataan.sumber
Kode:
Keluaran:
Apa ini yang kau inginkan?
sumber