在Python中序列化二进制数据

5

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

是否有一种可移植的方式来序列化这些数据,以便其他语言可以读取?

JSON不行,因为我刚发现它没有真正的方法来存储二进制数据;它的字符串应该是Unicode的。

我不想使用pickle,因为我不想让它存在安全风险,并且它的使用仅限于其他Python程序。

有什么建议吗?我真的想使用内置库(或至少是标准Anaconda分发的一部分)。


2
Base64?90年代Usenet上的色情图片足够了…… - Geoff Genz
是的,Base64是我的备选方案。我只是希望已经有一个一步解决方案存在。 - Jason S
你不能直接按照它们的样子写吗?“二进制字符串”听起来就像已经被序列化了。 - Sven Marnach
1个回答

4

如果您只需要字符串中的二进制数据,并且可以轻松恢复单个字符串之间的边界,那么您可以直接将它们作为原始字符串写入文件。

如果您无法轻松恢复字符串边界,则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并再次编码回原始字符串。

边界并非不可能重新创建,但也不容易获得(数据包分帧问题)。所以,是的,考虑到JSON的广泛应用,我可以接受它的开销。 - Jason S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接