Python调用Spotify API获取Token时遭遇UTF-8解码错误求助
Python调用Spotify API获取Token时遭遇UTF-8解码错误求助
嘿,我一眼就瞅出问题所在啦!你在处理Base64认证字符串的时候搞反了编码和解码操作,这才导致了这个UTF-8解码错误。
错误原因分析
你当前代码里写的是:
auth_base64 = str(base64.b64decode(auth_bytes), "utf-8")
但Spotify的Basic认证要求我们把client_id:client_secret这个字符串编码成Base64格式,而不是去解码它。你用b64decode()处理原本是UTF-8字节的auth_string,相当于做了反向操作,得到的内容自然不是合法的UTF-8字符串,所以触发了UnicodeDecodeError。
修正后的代码
把Base64处理的部分改成b64encode()就没问题了,完整的get_token()函数如下:
def get_token(): auth_string = client_id + ":" + client_secret auth_bytes = auth_string.encode("utf-8") # 这里把b64decode替换成b64encode auth_base64 = str(base64.b64encode(auth_bytes), "utf-8") url = "https://accounts.spotify.com/api/token" headers = { "Authorization": "Basic " + auth_base64, "Content-type": "application/x-www-form-urlencoded" } data = {"grant_type": "client_credentials"} result = post(url, headers=headers, data=data) json_result = json.loads(result.content) token = json_result["access_token"] return token
补充说明
b64encode()会把传入的字节数据转换成Base64编码的字节串,再转成UTF-8字符串就是Spotify需要的认证头内容了。- 修正后运行代码,应该就能成功获取到access_token,不会再触发解码错误啦。
备注:内容来源于stack exchange,提问作者Revers_official
相关产品推荐
相关产品推荐

