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

标签 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

最佳答案

一种方法是删除 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/

相关文章:

python - 在 EMR 集群上安装 pandas

python - 如何检查输入是否是Python中的自然数?

python-3.x - 层列表的 PyTorch 模型抛出错误

python - Docker gremlin-服务器 : "Cannot assign requested address"

python 3 : Standard way to surpress the b' prefix when printing

python - 使用 QThread 动态创建 QImage 帧到 ffmpeg 标准输入

python - 为什么我可以使用按位 AND 检查列表是否包含字典的键?

python - Keras 模型通过编译但在运行时因值错误而崩溃

python - 是否有匹配列表、字典和集合但不匹配字符串的 Python 类型签名?

python - 使用 PIL 显示 RGB 图像的问题