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)
我到底错过了什么?
b64encode接受bytes并返回bytes。要与字符串合并,也请执行decode.
'Authorization': 'Basic ' + b64encode(auth_string.encode()).decode()
Run Code Online (Sandbox Code Playgroud)