从 Python2 到 Python3 时的 b64encode

Gre*_*dot 7 python encoding python-3.x

我正在运行一些在 Python2 到 Python3 上运行的代码,但它有一些问题。我有一个带格式的字符串:

auth_string = '{client_id}:{client_secret}'.format(client_id=client_id, client_secret=client_secret)
Run Code Online (Sandbox Code Playgroud)

并将其作为“标题”的一部分传入:

headers = {
            'Accept': 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
            'Authorization': 'Basic ' + b64encode(auth_string)
        }
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到此错误:

TypeError: 'str' does not support the buffer interface
Run Code Online (Sandbox Code Playgroud)

经过一番研究,这是因为 Python3 将字符串视为 unicode 对象,您需要先将它们转换为字节。没问题,我将行更改为:

'Authorization': 'Basic ' + b64encode(auth_string.encode(encoding='utf_8'))
Run Code Online (Sandbox Code Playgroud)

但现在我收到一个新错误:

TypeError: Can't convert 'bytes' object to str implicitly
Run Code Online (Sandbox Code Playgroud)

我到底错过了什么?

pac*_*lik 6

b64encode接受bytes并返回bytes。要与字符串合并,也请执行decode.

'Authorization': 'Basic ' + b64encode(auth_string.encode()).decode()
Run Code Online (Sandbox Code Playgroud)