修复被转义反斜杠打断的unicode字符串

2024-10-02 08:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看这个问题: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'

当我打印它时,一些字符会评估:

^{pr2}$

我可以这样手动修复:

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

如何在不复制和粘贴的情况下完成此操作?在


Tags: mywithx01strx12x80xb1xa5
2条回答

我在关于已接受答案的评论中提到了^{}。但我觉得我应该在这里包括一个代码片段:

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):

^{pr2}$

去掉单引号,编码得到字节,然后使用“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"))

印刷品:

^{pr2}$

相关问题 更多 >

    热门问题