Сериализация двоичных данных в Python

У меня есть несколько двоичных данных, которые находятся в Python в виде массива байтовых строк.

Есть ли переносимый способ сериализации этих данных, которые могли читать другие языки?

JSON проигрывает, потому что я только узнал, что у него нет реального способа хранения двоичных данных; его строки должны быть Unicode.

Я не хочу использовать pickle, потому что я не хочу риска для безопасности, и это ограничивает его использование другими программами Python.

Любые советы? Я бы очень хотел использовать встроенную библиотеку (или, по крайней мере, одну часть стандартного дистрибутива Anaconda).

Ответ 1

Если вам просто нужны двоичные данные в строках и вы можете легко восстановить границы между отдельными строками, вы можете просто записать их в файл напрямую, как исходные строки.

Если вы не можете легко восстановить границы строк, 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 и снова закодировать обратно к исходной строке.