Могу ли я преобразовать строковое значение в строковый литерал в C #, как я вижу это в коде? Я хотел бы заменить вкладки, новые строки и т. Д. На их escape-последовательности.
Если этот код:
Console.WriteLine(someString);
производит:
Hello
World!
Я хочу этот код:
Console.WriteLine(ToLiteral(someString));
производить:
\tHello\r\n\tWorld!\r\n
@"..."
литералы verbatim ( )?Что насчет Regex.Escape (String) ?
источник
Hello World?
вHello World\?
, но это неверный строковый литерал.РЕДАКТИРОВАТЬ: более структурированный подход, включая все escape-последовательности для
string
s иchar
s.Не заменяет символы Юникода их буквальным эквивалентом. Яйца тоже не готовит.
источник
@"[\a\b\f\n\r\t\v\\""/]"
и добавленоm_replaceDict.Add("/", @"\/");
дляJSON
.пытаться:
источник
источник
Полностью рабочая реализация, включая экранирование Unicode и ASCII непечатаемых символов. Не вставляет знаки «+» как ответ Халлгрима .
источник
Char.GetUnicodeCategory(c) == UnicodeCategory.Control
чтобы решить, избежать ли этого, или люди, которые не говорят на ASCII, не будут очень счастливы.input = input ?? string.Empty;
в качестве первой строки метода, чтобы я мог пройтиnull
и вернуться""
вместо исключения с нулевой ссылкой.'
и теперь у вас есть то, что Python дает вам из коробкиrepr(a_string)
:).Ответ Халлгрима превосходен, но дополнения "+", новая строка и отступы нарушали мою функциональность. Простой способ обойти это:
источник
return literal
чтобы сделать ее более читабельной:literal = literal.Replace("\\r\\n", "\\r\\n\"+\r\n\"");
literal = literal.Replace("/", @"\/");
дляJSON
функциональности.Вот небольшое улучшение для ответа Smilediver, оно не ускользнет от всех символов без ASCII, но только они действительно необходимы.
источник
Интересный вопрос.
Если вы не можете найти лучший метод, вы всегда можете заменить.
В случае, если вы выбираете это, вы можете использовать этот C # Escape Sequence List :
Этот список можно найти в C # Часто задаваемые вопросы. Какие имеются escape-последовательности символов?
источник
Есть способ для этого в пакете Рослина Microsoft.CodeAnalysis.CSharp на nuget:
Очевидно, что это не существовало во время первоначального вопроса, но могло бы помочь людям, которые попали сюда из Google.
источник
Если соглашений JSON достаточно для неэкранированных строк, которые вы хотите экранировать, и которые вы уже используете
Newtonsoft.Json
в своем проекте (он имеет довольно большие накладные расходы), вы можете использовать этот пакет, как показано ниже:источник
источник
Моя попытка добавить ToVerbatim к принятому ответу Халлгрима выше:
источник
Халлгрим ответил превосходно. Вот небольшая настройка, если вам нужно разобрать дополнительные пробельные символы и разрывы строк с помощью регулярного выражения ac #. Мне это понадобилось в случае сериализованного значения Json для вставки в листы Google, и я столкнулся с проблемой, когда код вставлял символы табуляции, +, пробелы и т. Д.
источник
Я представляю свою собственную реализацию, которая обрабатывает
null
значения и должна быть более производительной за счет использования таблиц поиска в массивах, ручного преобразования в шестнадцатеричные числа и избеганияswitch
операторов.источник
Код:
Вывод:
Это то, что вы хотите?
источник