Сериализация двоичных данных в 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 и снова закодировать обратно к исходной строке.
Ответ 2
Отъезд http://bsonspec.org/. Это похоже на двоичный JSON.