В соответствии с документами встроенная строковая кодировка string_escape
:
Произведите [s] строку, которая подходит как строковый литерал в исходном коде Python
... в то время как unicode_escape
:
Произведите [s] строку, подходящую как литерал Юникода в исходном коде Python
Таким образом, они должны иметь примерно одинаковое поведение. НО, по-видимому, они обрабатывают одинарные кавычки по-разному:
>>> print """before '" \0 after""".encode('string-escape')
before \'" \x00 after
>>> print """before '" \0 after""".encode('unicode-escape')
before '" \x00 after
string_escape
избегает одиночной кавычки, а Unicode - нет. Можно ли предположить, что я могу просто:
>>> escaped = my_string.encode('unicode-escape').replace("'", "\\'")
... и получить ожидаемое поведение?
Изменить: Просто, чтобы быть предельно ясным, ожидаемое поведение получает что-то подходящее как литерал.