我在看这个问题:python3 replacing double backslash with single backslash [duplicate]
并筛选对类似问题的回答:Python Replace \ with \ , Why can't Python's raw string literals end with a single backslash? ,How do I unescape a unicode escaped string in python?
当我意识到没有一个答案可以真正解决这个问题。 假设我有一个破解的unicode字符串,它包含两个转义的反斜杠和转义字符:
my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
当我打印它时,一些角色评估:
print(my_str)
\xa5\xc0\xe6aKù\x80\xb1\xc8*☺↕$\xfbp▲(4\xd6{;Z
我可以像这样手动修复它:
my_str = repr(my_str)
my_str
"'\\\\xa5\\\\xc0\\\\xe6aKù\\\\x80\\\\xb1\\\\xc8*\\x01\\x12$\\\\xfbp\\x1e(4\\\\xd6{;Z'"
my_str = my_str.replace('\\\\','\\')
print(my_str)
'\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
但此时我必须手动将打印结果复制并粘贴到变量中以完成修复:
my_str = '\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
print(my_str)
¥ÀæaKù±È*☺↕$ûp▲(4Ö{;Z
如何在不复制和粘贴的情况下执行此操作?
答案 0 :(得分:2)
剥离单引号,编码以获取字节,然后使用" unicode-escape"解码:
# original code
my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
my_str = repr(my_str)
my_str = my_str.replace('\\\\','\\')
print(my_str)
# encode/decode stuff
print(my_str.strip("'").encode().decode("unicode-escape"))
打印:
'\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
¥ÀæaKù±È*$ûp(4Ö{;Z
答案 1 :(得分:0)
我在接受答案的评论中提到ast.literal_eval
。但我觉得我应该在这里包含一个代码片段:
Reverse repr function in Python
from ast import literal_eval
my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
my_str = repr(my_str)
my_str = my_str.replace('\\\\','\\')
print(literal_eval(my_str))
结果(Python 3):
¥ÀæaKù±È*☺↕$ûp▲(4Ö{;Z