Сериализация двоичных данных в 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 и снова закодированы обратно в исходную строку.

Проверьте http://bsonspec.org/. Это как бинарный JSON.

Другие вопросы по тегам