如何将bytes类型转换为str或json?

Bit*_*arn 1 python arrays json encode decode

如何将 bytes 类型数组转换为 str 或 json?我有这个 python 字节码,我需要转换为 json 格式或字符串格式。我怎样才能做到这一点?

b'x\xda\x04\xc0\xb1\r\xc4 \x0c\x85\xe1]\xfe\x9a\x06\xae\xf36\'B\x11\xc9J$?\xbbB\xec\x9eo\xb3"\xde\xc0\x9ero\xc4Ryb\x1b\xe5?K\x18\xaa9\x97\xc4i\xdc\x17\xd6\xc7\xaf\x8f\xf3\x05\x00\x00\xff\xff l\x12l'
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 6

这看起来像随机二进制数据,而不是编码文本,因此在 JSON 中存储二进制数据的一种方法是使用 base64 编码。Base64 算法确保所有数据元素都是可打印的 ASCII 字符,但结果仍然是一个bytes对象,因此.decode('ascii')用于将 ASCII 字节转换为str适合在面向 JSON 使用的对象中使用的 ASCII 字符的 Unicode。

例子:

import base64
import json

data = b'x\xda\x04\xc0\xb1\r\xc4 \x0c\x85\xe1]\xfe\x9a\x06\xae\xf36\'B\x11\xc9J$?\xbbB\xec\x9eo\xb3"\xde\xc0\x9ero\xc4Ryb\x1b\xe5?K\x18\xaa9\x97\xc4i\xdc\x17\xd6\xc7\xaf\x8f\xf3\x05\x00\x00\xff\xff l\x12l'

j = {'data':base64.b64encode(data).decode('ascii')}
s = json.dumps(j)
print(s) # resulting JSON text

# restore back to binary data
j2 = json.loads(s)
data2 = base64.b64decode(j2['data'])
print(data2 == data)
Run Code Online (Sandbox Code Playgroud)

输出:

{"data": "eNoEwLENxCAMheFd/poGrvM2J0IRyUokP7tC7J5vsyLewJ5yb8RSeWIb5T9LGKo5l8Rp3BfWx6+P8wUAAP//IGwSbA=="}
True
Run Code Online (Sandbox Code Playgroud)

更简单但结果更长的是用于data.hex()获取十六进制字符串表示形式并将bytes.fromhex()其转换回字节:

>>> s = data.hex()
>>> s
'78da04c0b10dc4200c85e15dfe9a06aef336274211c94a243fbb42ec9e6fb322dec09e726fc45279621be53f4b18aa3997c469dc17d6c7af8ff3050000ffff206c126c'
>>> data2 = bytes.fromhex(s)
>>> data2
b'x\xda\x04\xc0\xb1\r\xc4 \x0c\x85\xe1]\xfe\x9a\x06\xae\xf36\'B\x11\xc9J$?\xbbB\xec\x9eo\xb3"\xde\xc0\x9ero\xc4Ryb\x1b\xe5?K\x18\xaa9\x97\xc4i\xdc\x17\xd6\xc7\xaf\x8f\xf3\x05\x00\x00\xff\xff l\x12l'
>>> data2 == data
True
Run Code Online (Sandbox Code Playgroud)