How to convert a raw string r'\xdd' to '\xdd' more gracefully?

Peter Otten __peter__ at web.de
Thu Dec 8 11:20:27 EST 2022


On 08/12/2022 02:17, Jach Feng wrote:
> Peter Otten 在 2022年12月8日 星期四清晨5:17:59 [UTC+8] 的信中寫道:
>> On 07/12/2022 03:23, Jach Feng wrote:
>>> s0 = r'\x0a'
>>> At this moment it was done by
>>>
>>> def to1byte(matchobj):
>>> ....return chr(int('0x' + matchobj.group(1), 16))
>>> s1 = re.sub(r'\\x([0-9a-fA-F]{2})', to1byte, s0)
>>>
>>> But, is it that difficult on doing this simple thing?
>>>>> import codecs
>>>>> codecs.decode(r"\x68\x65\x6c\x6c\x6f\x0a", "unicode-escape")
>> 'hello\n'
> Thank you. What I really want to handle is to any r'\xdd'. The r'\x0a' is for example. Sorry, didn't describe it clearly:-)

Hm, codecs.decode() does work for arbitrary escapes. It will produce the
same result for r"\xdd"-type raw strings where d is in the range 0...F.
It will also convert other escapes like

 >>> codecs.decode(r"\t", "unicode-escape")
'\t'
 >>> codecs.decode(r"\u5728", "unicode-escape")
'在'



More information about the Python-list mailing list