API-调用 (json) 上的 UnicodeEncodeError

UnicodeEncodeError on API-call (json)

我正在尝试打印出此 API 调用的结果,但我收到了 UnicodeEncodeError。可能是超级菜鸟的问题,但真的很感激任何帮助:)

import http.client
import json

api_key = 'hidden'
connection = http.client.HTTPConnection('api.football-data.org')
headers = { 'X-Auth-Token': api_key, 'X-Response-Control': 'minified' }
connection.request('GET', '/v1/competitions', None, headers)
response = json.loads(connection.getresponse().read().decode())

print(response)

错误:

回溯(最近调用最后): 文件“/Users/kjetilbergtun/Dropbox/My Python Projects/footballapi.py”,第 13 行,在 打印(响应)

UnicodeEncodeError: 'ascii' 编解码器无法对位置 51 中的字符 '\xe9' 进行编码:序号不在范围内 (128)

问题是您正在尝试处理非 ascii 字符。您需要使用 .encode('utf-8')

将其编码为 un​​icode

由于您的响应是一个字节对象,您需要解码以取回字符串

import http.client
import json

api_key = 'hidden'
connection = http.client.HTTPConnection('api.football-data.org')
headers = { 'X-Auth-Token': api_key, 'X-Response-Control': 'minified' }
connection.request('GET', '/v1/competitions', None, headers)
print (connection.getresponse().read().decode("utf-8"))

encodeprint 用来将字符串中的 Unicode 字符转换为可以发送到输出设备的字节流。

在开始Python之前,您可以将环境变量PYTHONIOENCODING设置为控制台所需的编码。如果您不知道应该是什么,我建议在 Windows 上尝试 mbcs 并在其他任何地方尝试 utf-8。如果您不提供编码,则默认值为 ascii,它仅适用于最简单的字符串。