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

2024-06-01 00:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将图片字节包含到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})

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

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


Tags: httpsorgcommunityimportjson编码data字节
2条回答

在这种情况下,我想到的最佳解决方案是base85编码,它将4个字节表示为5个字符。此外,还可以将每个字节映射为U+0000-U+00FF格式的相应字符,然后将其转储为json格式。 不过,这些方法可能会有过多的杀伤力,而base64,ease-wise,将是赢家。

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

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

json.dumps({'picture' : data.encode('base64')})

当然,这就假设接收者希望您的数据被包装成这样。

如果您的API端点设计得很糟糕,无法期望图像字节作为文本传入,那么另一种方法是假装您的字节是真正的文本;如果您首先将其解码为拉丁语-1,则可以将这些字节直接映射到Unicode码位:

json.dumps({'picture' : data.encode('latin-1')})

当数据已经是一个unicode对象时,json库将继续将其视为文本。这意味着它可以用\uhhhh转义替换非ASCII码位。

相关问题 更多 >