在Python中序列化二进制数据

5 投票
1 回答
8197 浏览
提问于 2025-04-17 23:44

我有一些二进制数据,这些数据在Python里是以字节字符串数组的形式存在的。

有没有一种通用的方法可以把这些数据保存下来,让其他编程语言也能读取呢?

使用JSON不行,因为我刚发现它并没有真正的方法来存储二进制数据;它的字符串是期望为Unicode格式的。

我不想用pickle,因为这样会有安全风险,而且这也限制了它只能在其他Python程序中使用。

有没有什么建议?我真的希望能用一个内置的库(或者至少是Anaconda标准发行版里的一部分)。

1 个回答

5

如果你只需要字符串中的二进制数据,并且能够轻松找出每个字符串的边界,那么你可以直接把它们写入一个文件,作为原始字符串。

如果你不能轻松找出字符串的边界,使用JSON看起来是个不错的选择:

a = [b"abc\xf3\x9c\xc6", b"xyz"]
serialised = json.dumps([s.decode("latin1") for s in a])
print [s.encode("latin1") for s in json.loads(serialised)]

这段代码会打印出结果

['abc\xf3\x9c\xc6', 'xyz']

这里的关键是,任意的二进制字符串都是有效的latin1编码,因此它们总是可以解码成Unicode,然后再编码回原来的字符串。

撰写回答