"Steven D'Aprano" <steve-remove-t...@cybersource.com.au> wrote in message news:4c2c2cab$0$14136$c3e8...@news.astraweb.com...
I have a byte-string which is an escape sequence, that is, it starts with
a backslash, followed by either a single character, a hex or octal escape
sequence. E.g. something like one of these in Python 2.5:

'\\n'
'\\xFF'
'\\023'

If s is such a string, what is the right way to un-escape them to single
character byte strings?

I could decode them to unicode first, then encode to ASCII:

s = '\\n'
assert len(s) == 2
s.decode('unicode-escape').encode()
'\n'

but this fails for non-ASCII bytes:

'\\xFF'.decode('unicode-escape').encode()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in
position 0: ordinal not in range(128)

Use 'string-escape':

s=['\\n','\\xff','\\023']
for n in s: n.decode('string-escape')
...
'\n'
'\xff'
'\x13'

-Mark


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to