Преобразование символов в их escape-последовательности python

#python #escaping

#python #экранирование

Вопрос:

Возможно ли взять строку и преобразовать все символы в их escape-последовательности Python?

Ответ №1:

repr() экранирует все символы, которые необходимо экранировать

 repr(string)
  

В стандартной библиотеке есть другие методы, такие как экранирование URI и так далее

Комментарии:

1. Есть ли способ избежать всех символов?

2. @Acorn, ты мог бы сделать что-то вроде этого print "".join("\x" c.encode('hex') for c in "ABCDE")

Ответ №2:

Поддерживает полное экранирование обоих str и unicode (теперь создает самую короткую escape-последовательность):

 def escape(s):
    ch = (ord(c) for c in s)
    return ''.join(('\xx' % c) if c <= 255 else ('\ux' % c) for c in ch)

for text in (u'u2018u2019hello thereu201cu201d', 'hello there'):
    esc = escape(text)
    print esc

    # code below is to verify by round-tripping
    import ast
    assert text == ast.literal_eval('u"'   esc   '"')
  

Вывод:

 u2018u2019x68x65x6cx6cx6fx20x74x68x65x72x65u201cu201d
x68x65x6cx6cx6fx20x74x68x65x72x65
  

Комментарии:

1. Как насчет строк, содержащих сочетание символов Unicode и стандартных символов?

2. @Acorn unicode uABCD escape-последовательность будет охватывать весь диапазон символов. Вы хотели как можно более короткую escape-последовательность?

3. @Acorn Я обновил его, чтобы создать как можно более короткую последовательность, поэтому символы, ord(c) <= 255 будут кодироваться как xAB форма, даже в строке Unicode.

4. @samplebias: Еще лучше! (однако вы забыли изменить выходные данные)