将字符串转换为Base 64格式并从Base 64格式还原为字符串

22

我正在尝试编写两个程序,一个将字符串转换为base64,另一个将base64编码的字符串转换回字符串。
到目前为止,我无法通过base64编码部分,因为我一直收到错误提示。

TypeError: expected bytes, not str

我的代码目前看起来像这样

def convertToBase64(stringToBeEncoded):
import base64
EncodedString= base64.b64encode(stringToBeEncoded)
return(EncodedString)

7
自Python-3版本引入了Unicode字符串后,字节类型也被引入。你需要将你的字符串转换为一个bytearray,例如可以通过b = bytes(mystring, 'utf-8')来实现,然后使用变量b进行编码:EncodedString = base64.b64encode(b),这将返回一个bytearray。 - Andreas Wallner
1
这个问题困扰了我大部分一天的时间,直到我偶然发现了这个小贴士:https://stackabuse.com/encoding-and-decoding-base64-strings-in-python/(我本想在这里发布一个答案,但是帖子已被关闭为重复。很抱歉,但是链接的帖子并没有解决这个问题,尽管答案可能与之相关。) - Jim Fell
1个回答

51

字符串已经“解码”,因此str类没有“decode”函数。因此:

AttributeError: type object 'str' has no attribute 'decode'
如果您想将字节数组解码并转换为字符串,请调用以下方法:
the_thing.decode(encoding)

如果你想将字符串编码(转换成字节数组),请调用:

the_string.encode(encoding)

关于base64方面的问题: 在上述编码中使用“base64”作为值会导致错误:

LookupError: unknown encoding: base64

打开控制台并输入以下内容:

import base64
help(base64)

你会发现 base64 有两个非常方便的函数,即 b64decode 和 b64encode。b64decode 返回一个字节数组,而 b64encode 需要一个字节数组。

要将一个字符串转换为它的 base64 表示形式,您首先需要将其转换为字节。我喜欢用 utf-8,但使用您需要的任何编码...

import base64
def stringToBase64(s):
    return base64.b64encode(s.encode('utf-8'))

def base64ToString(b):
    return base64.b64decode(b).decode('utf-8')

1
这也是一个很好的提醒,对于那些从py2x转换到py3x的人来说,uu917soki00vung。 - dreftymac

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