为什么base64.b64encode返回值b'somestring'而不是简单的'somestring'?

时间:2019-02-20 20:50:42

标签: python

考虑以下代码...

base64EncodedCredentials = base64.b64encode(b"johndoe:mysecret")
print(base64EncodedCredentials)

我得到的回复是

b'am9obmRvZTpteXNlY3JldA=='

为什么在字符串前有b?

如何只获取'am9obmRvZTpteXNlY3JldA =='的字符串值?

从技术上讲,这个问题可以看作是另一个问题的重复。 IF 您知道问题出在字节字符串与字符串之间。就我而言,我问这个问题是因为我不知道有什么叫做字节字符串。对于新的Python程序员来说,这个问题可能是有益的,因为它使用了他们在程序或调试器上看到的语言。如果他们不知道字节字符串是什么,那么这个问题可能会有用,并提供从他们的问题到更熟练的Python程序员使用的技术术语的转换。问题在于词汇的使用。

2 个答案:

答案 0 :(得分:2)

它正在返回一个字节对象。通常,base64用于确保7位安全,因此通常与面向字节(而不是面向字符)的数据一起使用,例如,用于拔出套接字。

您可以将其解码为字符串,就像其他任何字节对象一样:

output.decode('ascii')

使用encode()decode()在字节和字符串对象之间进行更改。使用ascii编解码器是安全的,因为可以保证base64仅返回7位ascii。

答案 1 :(得分:1)

请参阅this post摆脱编码。

print(base64EncodedCredentials.decode("utf-8"))