我想将图片字节包含到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。有人能帮我吗?:)
在这种情况下,我想到的最佳解决方案是base85编码,它将4个字节表示为5个字符。此外,还可以将每个字节映射为U+0000-U+00FF格式的相应字符,然后将其转储为json格式。 不过,这些方法可能会有过多的杀伤力,而base64,ease-wise,将是赢家。
JSON数据需要处理Unicode文本。二进制图像数据不是文本,因此当
json.dumps()
函数尝试使用UTF-8(默认值)将bytestring解码为unicode
时,解码失败。首先,必须将二进制数据包装为文本安全编码,例如Base-64:
当然,这就假设接收者希望您的数据被包装成这样。
如果您的API端点设计得很糟糕,无法期望图像字节作为文本传入,那么另一种方法是假装您的字节是真正的文本;如果您首先将其解码为拉丁语-1,则可以将这些字节直接映射到Unicode码位:
当数据已经是一个
unicode
对象时,json
库将继续将其视为文本。这意味着它可以用\uhhhh
转义替换非ASCII码位。相关问题 更多 >
编程相关推荐