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