如何修复UTF8解码错误的字符串?

2024-06-17 04:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用restfulapi中的数据,它返回字符串和整数值。但是,它似乎返回了一些编码/解码错误的字符串值(可能)。在

预期字符串:

criança

收到的字符串:

^{pr2}$

这是我的代码:

url = "https://analytics.us.algolia.com/2/searches?index={index}&startDate={yesterday}".format(index=index, yesterday=yesterday)
headers = { 'X-Algolia-Application-Id': app_id,
            'X-Algolia-API-Key': app_key,
            'Content-Type': 'application/json; charset=utf-8'}

response = requests.get(url, headers=headers)
response_json = json.loads(response.text)

print(response_json)

这是一个python3.6.x脚本,它将从Algolia的restfulapi获取数据并将其存储在amazonredshift中。我在ubuntu18.04上编写这个脚本,我的终端字符编码集是pt_BR.UTF-8echo $LANG)和UTF-8(locale charmap)。在

当我在数据库中存储数据之前打印它时,我发现接收到的数据是错误的-数据库被设置为使用charset=utf8。我也可以通过SELECT语句在数据库中看到这个错误的数据。在

我发现了这个UTF-8 Encoding Debugging Chart,它指出这可能是因为UTF-8字节被解释为Windows-1252(或iso8859-1)字节。在

如何使用Python函数/lib来处理它?在


Tags: 数据字符串数据库jsonappurl编码index
1条回答
网友
1楼 · 发布于 2024-06-17 04:28:11

requests库试图guess the encoding of the response。 可能requests正在将响应解码为cp1252(又称Windows-1252)。在

我猜这是因为如果你把文本编码回cp1252,然后把它解码成utf-8,你会看到正确的文本:

>>> 'criança'.encode('cp1252').decode('utf-8')
'criança'

基于此,我猜如果你问你的响应对象它猜到了什么编码,它会告诉你cp1252

^{pr2}$

像这样强制requests解码为utf-8,可能会解决您的问题:

>>> response.encoding = 'utf-8'

相关问题 更多 >