2014-12-18 4 views

ответ

2

Итак, вы пытаетесь кодировать картинку в json. Если вы хотите, чтобы отобразить его на веб-странице, рассмотрите возможность использования данных для URL-кодирование:

image = "data:image/jpg;base64,%s" % ''.join(open('file.jpg').read().encode('base64').split()) 
data = { 
    'name': 'david', 
    'avatar': image, 
} 
json_data = json.dumps(data) 

или если вам нужно только двоичные данные, просто используйте:

image = open('file.jpg').read().encode('base64') 
data = { 
    'name': 'david', 
    'avatar': image, 
} 
json_data = json.dumps(data) 

#decode 
data = json.loads(json_data) 
image = data['avatar'].decode('base64') 
+0

Прохладный, спасибо за это. Он работает с точки зрения кодирования. Как бы я затем декодировать эти данные обратно в точные данные файла, 'open ('file.jpg'). Read()'? – David542

+0

Это очень помогло, но вместо использования 'open' я использовал' StringIO' (я получаю изображение из базы данных) – Renier

2

Вы должны использовать Python 2.x. Поскольку у вас есть Unicode данных в строке, вы должны сделать это в Unicode string literal:

>>> import json 
>>> data = { 
...  'name': 'david', 
...  'avatar': u'\xed\xb3\x1cW\x7f\x87\x1c\xb9*Pw\x9a#W\x05\xeaNs\xe4\[email protected]\xddi\x8e\\\x15\xa8;\xcd\x91\xab\x02u\xa79rU\xa0\xee4\xf7K\xb9\x05{t\x02\xc6I\xb6\xaa\xbf\x00\x00\x00\x00IEND\xaeB`\x82...' 
... } 
>>> json.dumps(data) 
'{"name": "david", "avatar": "\\u00ed\\u00b3\\u001cW\\u007f\\u0087\\u001c\\u00b9*Pw\\u009a#W\\u0005\\u00eaNs\\u00e4\\[email protected]\\u00ddi\\u008e\\\\\\u0015\\u00a8;\\u00cd\\u0091\\u00ab\\u0002u\\u00a79rU\\u00a0\\u00ee4\\u00f7K\\u00b9\\u0005{t\\u0002\\u00c6I\\u00b6\\u00aa\\u00bf\\u0000\\u0000\\u0000\\u0000IEND\\u00aeB`\\u0082..."}' 
>>> 

u Размещая перед строкой буквального, вы говорите Python, чтобы обработать строку в Unicode.

Обратите внимание, что это не нужно в Python 3.x с all strings are now Unicode by default.

+0

Не могли бы вы взглянуть на обновленный вопрос? У меня нет такого контроля над строкой (я не думаю). – David542

+0

Это вообще плохая идея, чтобы интерпретировать двоичные данные как unicode. – Daniel

+0

@ Даниэль - хорошо, тогда как бы я передал двоичные данные в виде двоичных данных в json? – David542

Смежные вопросы