在Python中序列化二进制数据

时间:2014-03-24 21:39:35

标签: python python-2.7 serialization binary

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

是否有可移植的方法来序列化其他语言可以读取的数据?

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

我不想使用pickle因为我不想要安全风险,这限制了它对其他Python程序的使用。

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

1 个答案:

答案 0 :(得分:3)

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

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