Python 3.4将字节文字字符串转换为字节对象

时间:2016-07-13 19:10:09

标签: python python-3.x

这不是关于使用UTF-8进行解码。这是关于将字节对象作为文字读取并且需要它作为字节对象而不重新发明解析过程。如果我的问题得到答案,那么它就会隐藏许多有关解码问题的答案。

这就是我需要的:

x = "bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')"
y = ???(x, ???)
z = bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')
if y == z:
   print ("Yes!")

有关如何更换这些问号的任何建议吗?

谢谢!

                           -- Dave

1 个答案:

答案 0 :(得分:1)

一种方法是从x(bytearray(b''))中删除所有混乱,然后我们只将每个字符转换为其字节表示并将其包装到bytearray对象中。

x = "bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')"
y = bytes(ord(c) for c in x[12:-2])

下面的第二种方法不会限于bytearray,您应该谨慎使用它以防止注射,但如果您确定您的内容格式正确,您可以使用:

x = r"bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')"
y = eval(x)
z = bytearray(b'abc\xd8\xa2\xd8\xa8\xd8\xa7xyz')

这里需要在x前加上r"...",以防止反斜杠立即将unicode序列插入x。因此,可能无法将其与动态内容一起使用,例如字符串来自标准输入或从文件中读取。

您也可以按照善意的建议使用ast.literal_eval(x[10:-1])