这与使用 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
最佳答案
一种方法是删除 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
,您应该小心使用它以防止注入(inject),但如果您确定您的内容采用正确的格式,您可以使用此方法:
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 中。因此,可能无法将其与动态内容一起使用,例如来自标准输入或从文件读取的字符串。
您还可以按照 kindall 的建议使用 ast.literal_eval(x[10:-1])
。
关于Python 3.4 将字节文字字符串转换为字节对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359861/