我有以下代码:
code1 = ("\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1")
print code1
code2 = open("code.txt", 'rb').read()
print code2
code1输出:
�צ�t$פ_)�½i�»±
code2输出:
"\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
我需要code2(我从文件中读取)与code1具有相同的输出 我该如何解决这个问题?
答案 0 :(得分:5)
解释一系列字符,例如
In [125]: list(code2[:8])
Out[125]: ['\\', 'x', 'd', '9', '\\', 'x', 'f', '6']
因为Python是带有转义字符的字符串,例如
In [132]: list('\xd9\xf6')
Out[132]: ['\xd9', '\xf6']
使用.decode('string_escape')
:
In [122]: code2.decode('string_escape')
Out[122]: '\xd9\xf6\xd9t$\xf4_)\xc9\xbdi\xd1\xbb\x18\xb1'
在Python3中,string_escape
编解码器已被删除,因此等效成为
import codecs
codecs.escape_decode(code2)[0]
答案 1 :(得分:3)
这个例子:
import binascii
code1 = "\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
code2 = "\\xd9\\xf6\\xd9\\x74\\x24\\xf4\\x5f\\x29\\xc9\\xbd\\x69\\xd1\\xbb\\x18\\xb1"
print code1 == binascii.unhexlify(code2.replace('\\x', ''))
打印True
。
您可以使用binascii.unhexlify
将十六进制文本表示转换为二进制,但首先必须从字符串中删除\x
。
编辑:我刚刚意识到双引号是输出的一部分。基本上你需要传递有效的十六进制字符串,所以其他一切都需要被剥离。在您的情况下,您需要将code2.replace('\\x', '').strip('"')
传递给unhexlify
。您可以使用eval
,但可能会考虑Security of Python's eval() on untrusted strings?以供将来选择。
答案 2 :(得分:-3)
print eval(code2)
应该完成这项工作。