Base 64在Python中编码JSON变量

时间:2014-07-18 18:28:26

标签: python json python-3.x base64

我有一个存储json值的变量。我想在Python中使用base64编码。但错误'不支持缓冲接口'被扔了。我知道base64需要一个字节来转换。但是因为我是Python中的新手,不知道如何将json转换为base64编码的字符串。是否有直接的方法来做到这一点?

4 个答案:

答案 0 :(得分:12)

在Python 3.x中,您需要将str对象转换为bytes base64对象才能对其进行编码。您可以使用str.encode方法执行此操作:

>>> import json
>>> d = {"alg": "ES256"} 
>>> s = json.dumps(d)  # Turns your json dict into a str
>>> print(s)
{"alg": "ES256"}
>>> type(s)
<class 'str'>
>>> base64.b64encode(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.2/base64.py", line 56, in b64encode
    raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
>>> base64.b64encode(s.encode('utf-8'))
b'eyJhbGciOiAiRVMyNTYifQ=='

如果您将your_str_object.encode('utf-8')的输出传递给base64模块,则应该能够对其进行编码。

答案 1 :(得分:2)

您可以先对字符串进行编码,例如UTF-8,然后对其进行base64编码:

data = '{"hello": "world"}'
enc = data.encode()  # utf-8 by default
print base64.encodestring(enc)

这也适用于2.7:)

答案 2 :(得分:2)

这是在python3上工作的两种方法 已弃用 encodestring ,建议使用的是 encodebytes

text = ''
for idx, value in enumerate(values):
    if idx != 0:
        text += ' | '
    text += ('value = ' + value)

答案 3 :(得分:1)

这里有一个函数,你可以输入一个字符串,它会输出一个 base64 字符串。

import base64
def b64EncodeString(msg):
    msg_bytes = msg.encode('ascii')
    base64_bytes = base64.b64encode(msg_bytes)
    return base64_bytes.decode('ascii')