我有一些二进制数据,以字节字符串数组的形式在Python中。
是否有一种可移植的方式来序列化这些数据,以便其他语言可以读取?
JSON不行,因为我刚发现它没有真正的方法来存储二进制数据;它的字符串应该是Unicode的。
我不想使用pickle
,因为我不想让它存在安全风险,并且它的使用仅限于其他Python程序。
有什么建议吗?我真的想使用内置库(或至少是标准Anaconda分发的一部分)。
我有一些二进制数据,以字节字符串数组的形式在Python中。
是否有一种可移植的方式来序列化这些数据,以便其他语言可以读取?
JSON不行,因为我刚发现它没有真正的方法来存储二进制数据;它的字符串应该是Unicode的。
我不想使用pickle
,因为我不想让它存在安全风险,并且它的使用仅限于其他Python程序。
有什么建议吗?我真的想使用内置库(或至少是标准Anaconda分发的一部分)。
如果您只需要字符串中的二进制数据,并且可以轻松恢复单个字符串之间的边界,那么您可以直接将它们作为原始字符串写入文件。
如果您无法轻松恢复字符串边界,则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并再次编码回原始字符串。