如何在Python 3中对字符串类型的变量进行Base64编码/解码?

5

我收到一个错误提示,说编码的行需要是bytes类型而不是str/dict类型

我知道在文本前面添加"b"可以解决这个问题,并打印出已编码的内容。

import base64
s = base64.b64encode(b'12345')
print(s)
>>b'MTIzNDU='

但是我如何对变量进行编码? 例如:

import base64
s = "12345"
s2 = base64.b64encode(s)
print(s2)

加上b后出现了错误,不加却没有。我不理解。

我还试图使用base64对一个字典进行编码/解码。

1个回答

11

你需要对Unicode字符串进行编码。如果它只包含普通字符,你可以使用ASCII编码。如果它可能包含其他字符,或者仅出于一般安全性考虑,建议使用utf-8编码。

>>> import base64
>>> s = "12345"
>>> s2 = base64.b64encode(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ". . . /lib/python3.3/base64.py", line 58, in b64encode
    raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
>>> s2 = base64.b64encode(s.encode('ascii'))
>>> print(s2)
b'MTIzNDU='
>>> 

而要解码,您可以执行s2 = base64.b64decode(s.decode('ascii'))吗? - nurtul
3
不,你需要在b64decode之外进行解码:base64.b64decode(s2).decode('ascii')的结果是'12345' - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接