我正在使用来自RESTful应用程序接口的数据,它返回给我字符串和整数值。然而,它似乎返回了一些编码/解码不正确的字符串值(可能)。
预期字符串:
criança接收到的字符串:
criança下面是我的代码:
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的RESTful应用程序接口中获取数据并将其存储在Amazon Redshift中。我在Ubuntu18.04上编写这个脚本,我的终端字符编码集是pt_BR.UTF-8 (echo $LANG)和UTF-8 (locale charmap)。
当我在数据库中存储之前打印接收到的数据时,我发现接收到的数据是错误的-该数据库被设置为使用charset=utf8。我也可以通过SELECT语句在数据库中看到这个错误的数据。
我找到了这个UTF-8 Encoding Debugging Chart,它指出可能是因为UTF-8字节被解释为Windows-1252 (或ISO8859-1)字节。
我如何使用一些Python函数/lib来处理它?
发布于 2019-06-24 04:03:38
requests库会尝试guess the encoding of the response。可能是requests将响应解码为cp1252 (也就是Windows1252)。
我猜这是因为如果你把这个文本编码回cp1252,然后解码成utf-8,你会看到正确的文本:
>>> 'criança'.encode('cp1252').decode('utf-8')
'criança'在此基础上,我猜如果您询问response对象猜测了什么编码,它会告诉您cp1252
>>> response.encoding
'cp1252'强制requests解码为utf-8,如下所示,可能会解决您的问题:
>>> response.encoding = 'utf-8'发布于 2020-05-10 20:03:03
如果问题仍然存在,请将项目复制到其他文件夹,然后使用不同的项目文件名重新导入项目。首先重启你的Android Studio,然后从不同的文件夹导入项目,你应该已经解决了这个问题!
https://stackoverflow.com/questions/56704778
复制相似问题