-1

我在文件中有一个 base64 编码的八位字节字符串:

\x7D\x1E\x40\xEE\x62\x12\xE1\x9C\xC9\x28\x63\x95\xB6\x0C\xCB\xF7\xD2\x2F\x6F\xA8\xA1\xF5\x21\x4E\x7A \x4D\x79\x38\x78\xBF\x1B\x2B\x73\x28\x57\x5C\x8F\xB2\x53\xC0\x4C\x57\x6C\x77\xCF\x88\xA3\xAA\x7D\x52 \xEA\x2F\xCD\xE9\x29\x27\xD9\x0F\xA1\xF4\x12\xDB\xBF\x65\x09\x4C\x29\xE9\xC9\xB5\x0F\x3C\xE5\xEC\x82 \xBC\x42\x3C\xBB\xE2\xFF\x7B\x7B\xB1\x32\x3F\x4D\xC5\x14\x66\x69\x98\x0C\x43\xB1\xE2\x9D\x7F\x63\xEF \xF5\xB1\xEA\xA0\xDC\x58\x8B\x1F\x9E\xE1\x12\x14\xA3\xD2\x73\x27\x73\xE5\xC8\x2B\xBD\x0A\x0B\xE6\x05 \x42\x36\x21

我想用 Python 阅读它。但是 Python 自动为我转义了反斜杠,因此我得到了以下字符串:

\\x7D\\x1E\\x40\\xEE\\x62\\x12\\xE1\\x9C\\xC9\\x28\\x63\\x95\\xB6\\x0C\\xCB\\xF7\\ xD2\\x2F\\x6F\\xA8\\xA1\\xF5\\x21\\x4E\\x7A\\x4D\\x79\\x38\\x78\\xBF\\x1B\\x2B\\x73\ \x28\\x57\\x5C\\x8F\\xB2\\x53\\xC0\\x4C\\x57\\x6C\\x77\\xCF\\x88\\xA3\\xAA\\x7D\\x52 \\xEA\\x2F\\xCD\\xE9\\x29\\x27\\xD9\\x0F\\xA1\\xF4\\x12\\xDB\\xBF\\x65\\x09\\x4C\\ x29\\xE9\\xC9\\xB5\\x0F\\x3C\\xE5\\xEC\\x82\\xBC\\x42\\x3C\\xBB\\xE2\\xFF\\x7B\\x7B\ \xB1\\x32\\x3F\\x4D\\xC5\\x14\\x66\\x69\\x98\\x0C\\x43\\xB1\\xE2\\x9D\\x7F\\x63\\xEF \\xF5\\xB1\\xEA\\xA0\\xDC\\x58\\x8B\\x1F\\x9E\\xE1\\x12\\x14\\xA3\\xD2\\x73\\x27\\ x73\\xE5\\xC8\\x2B\\xBD\\x0A\\x0B\\xE6\\x05\\x42\\x36\\x21

和...

>>> repr(sig_bytes)
"'\\\\x7D\\\\x1E\\\\x40\\\\xEE\\\\x62\\\\x12...'"
>>> sig_bytes.replace("\\x","\x")
ValueError: invalid \x escape

我该怎么办?

4

1 回答 1

2

您可能会在repr()某处看到您的字符串版本,这并不意味着您的字符串加载不正确:

>>> s = "\x7D\x1E\x40\xEE"
>>> s
'}\x1e@\xee'
>>> repr(s)
"'}\\x1e@\\xee'"

编辑:

如果您的字符串已经被双重转义并且您想要删除它们,请使用replace,并且不要忘记\在参数中转义 the :

sig_bytes.replace("\\\\x","\\x")

编辑2:

OP 以某种方式将 repr 字符串加载到其字符串变量中,而不是正确的字符串数据。

s = "\\x7D\\x1E\\x40\\xEE"

让我们将其重新解释为 OP 应该从一开始就加载的正确形式。为此,我们将通过用引号括起来来构造字符串的完整字符串 repr,然后ast向其询问模块literal_eval

import ast
s = "\\x7D\\x1E\\x40\\xEE"
s = '"'+s+'"'
s = ast.literal_eval(s)
>>> s
'}\x1e@\xee'
于 2012-05-19T14:29:38.953 回答