我有一个每行一个字符串的文件,其中非ASCII字符已使用十进制代码点进行转义。一个例子是:
mj\\195\\164ger
(双反斜杠在文件中与输出一样)
我想要处理这个字符串以产生
mjäger
。通常情况下,Python使用十六进制转义而不是十进制转义(例如,上面的字符串将被编写为mj\xc3\xa4ger
,可以由Python解码:
>>> by=b'mj\xc3\xa4ger'
>>> by.decode('utf-8')
'mjäger'
然而,Python 并不会立即识别十进制转义符。
我编写了一个方法来正确操作字符串以生成十六进制转义符,但这些转义符本身也被转义了。我该如何让 Python 处理这些十六进制转义符以创建最终的字符串?
import re
hexconst=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
escapes=re.compile(r"\\[0-9]{3}")
def dec2hex(matchobj):
dec=matchobj.group(0)
dec=int(dec[1:])
digit1=dec//16 #integer division
digit2=dec%16
hex="\\x" + hexconst[digit1] + hexconst[digit2]
return hex
line=r'mj\195\164ger'
print(escapes.sub(dec2hex,line)) #Outputs mj\xc3\xa4ger
我需要做哪个最后一步才能将上面的输出从mj\xc3\xa4ger
转换为mjäger
?谢谢!