【问题标题】:django bytesIO to base64 String & return as JSONdjango bytesIO 到 base64 字符串并以 JSON 格式返回
【发布时间】:2015-01-30 06:16:27
【问题描述】:

我正在使用 python 3 并且我有这段代码,试图从流中取出 base64 并返回为 json - 但不起作用。

       stream = BytesIO()
       img.save(stream,format='png')
       return base64.b64encode(stream.getvalue())

在我看来,我有:

hm =mymap()
    strHM = hm.generate(data)
return HttpResponse(json.dumps({"img": strHM}),content_type="application/json"  )

出现错误不是 JSON 可序列化的。 base64.b64encode(stream.getvalue()) 似乎给出了字节

【问题讨论】:

  • strHM 是 base64.b64encode(stream.getvalue())

标签: python django python-3.x


【解决方案1】:

在 Python 3.x 中,base64.b64encode 接受 bytes 对象并返回 bytes 对象。

>>> base64.b64encode(b'a')
b'YQ=='
>>> base64.b64encode(b'a').decode()
'YQ=='

您需要将其转换为str 对象,使用bytes.decode:

return base64.b64encode(stream.getvalue()).decode()

【讨论】:

  • 考虑到这里没有使用 UTF-8,保留默认参数 encoding="utf-8" 有什么缺点吗?
  • @esmail,utf-8 在 Python 3.x 中是默认的,所以我认为没有缺点。如果不确定,可以明确指定ascii。
  • 必须有更好的方法,编码然后再解码
  • @Mojimi,编码(base64!):字节->字节,解码:字节-> str。如果您使用的是 python 2.7,如果您只需要 str(python 2.x 中的字节字符串),则可能不需要解码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2021-02-16
相关资源
最近更新 更多