Получить двоичный файл в JSON и из него с base64 - PullRequest
1 голос
/ 30 апреля 2019

Я построил два парсера, которые работают для всего, кроме некоторых двоичных блоков.Один переходит из проприетарного формата в стандартный json, а второй - из json обратно в проприетарный формат.

Когда я писал тот, который отправлялся в json, я был просто счастлив получить все это для анализа действительного json, но волновался, что, возможно, я не смог вернуть двоичные разделы, и проблема, кажется, имеетсбудется.

Base64, я считаю необходимым или одним из возможных решений, так как в противном случае двоичный файл слишком полон символов, которые не нравятся json, я думаю, что попытка избежать их и т. д. была бы более сложной, чем это решение base64.

Итак, вот двоичный блок из исходного файла:

cleanbinary = "0\x82\x02\xd80\x82\x01\xc0\xa0"

Он приведен в base64 следующим образом:

import base64    
out = base64.encodebytes(cleanbinary.encode('utf-8'))
print(out)
>> b'MMKCAsOYMMKCAcOAwqA=\n'

То, что вы можете повернуть обратно вДвоичный файл:

z = base64.decodebytes(out).decode('utf-8')
print(z == cleanbinary)
>> True

Однако ему нужен шаг посередине, но я просто не могу понять, чтобы поместить его в json в середине цикла.Пробовал следующее:

wrapped = '"' + str(out) + '"'

Итак, теперь у вас есть двойные кавычки, которые нужны json, и это str вместо bytes:

print(wrapped)
>> '"b\'MMKCAsOYMMKCAcOAwqA=\\n\'"'

Теперь допустим, что вывытащил это строковое значение из файла json с помощью анализатора json в Python.Как превратить его обратно в байтовое значение:

b'MMKCAsOYMMKCAcOAwqA=\n'

.., чтобы его можно было проанализировать обратно в двоичный файл?

1 Ответ

2 голосов
/ 30 апреля 2019

Я бы предложил преобразовать ваши байты в строку и обратно путем явного декодирования и кодирования:

out = b'MMKCAsOYMMKCAcOAwqA='

wrapped = f'"{out.decode()}"'
print(wrapped)     # ---> "MMKCAsOYMMKCAcOAwqA="

unwrapped = wrapped.strip('"').encode()
print(unwrapped)   # ---> b'MMKCAsOYMMKCAcOAwqA='
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...