Сериализация двоичных данных в Python
У меня есть некоторые двоичные данные, которые находятся в Python в виде массива байтовых строк.
Есть ли портативный способ сериализации этих данных, которые могут читать другие языки?
JSON проигрывает, потому что я только что узнал, что у него нет реального способа хранения двоичных данных; ожидается, что его строки будут Unicode.
Я не хочу использовать pickle
потому что я не хочу угрозы безопасности, и это ограничивает его использование другими программами Python.
Любой совет? Мне бы очень хотелось использовать встроенную библиотеку (или хотя бы ту, которая входит в стандартный дистрибутив Anaconda).
2 ответа
Если вам просто нужны двоичные данные в строках и вы можете легко восстановить границы между отдельными строками, вы можете просто записать их в файл напрямую, как необработанные строки.
Если вы не можете легко восстановить границы строк, 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 и снова закодированы обратно в исходную строку.