如何使用python将图片字节包含到JSON中?(编码问题)

Tho*_*hom 5 python encoding byte json image

我想将图片字节包含在JSON中,但我遇到了编码问题:

import urllib
import json

data = urllib.urlopen('https://www.python.org/static/community_logos/python-logo-master-v3-TM-flattened.png').read()
json.dumps({'picture' : data})
Run Code Online (Sandbox Code Playgroud)

UnicodeDecodeError:'utf8'编解码器无法解码位置0的字节0x89:无效的起始字节

我不知道如何处理这个问题因为我处理图像,所以我对这个编码问题有点困惑.我正在使用python 2.7.有人能帮帮我吗?:)

Mar*_*ers 8

JSON数据期望处理Unicode文本.二进制图像数据不是文本,因此当json.dumps()函数尝试将字节串解码为unicode使用UTF-8(默认值)解码失败时.

您必须首先使用文本安全编码包装二进制数据,例如Base-64:

json.dumps({'picture' : data.encode('base64')})
Run Code Online (Sandbox Code Playgroud)

当然,这假设接收器期望您的数据被包装.

如果您的API端点设计得非常糟糕,以至于您希望将图像字节作为文本传入,那么另一种方法是假装您的字节实际上是文本; 如果您首先将其解码为Latin-1,则可以将这些字节直接映射到Unicode代码点:

json.dumps({'picture' : data.encode('latin-1')})
Run Code Online (Sandbox Code Playgroud)

如果数据已经是unicode对象,则json库将继续将其视为文本.这意味着它可以用\uhhhh转义替换非ASCII代码点.