首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复UTF-8解码错误的字符串?

如何修复UTF-8解码错误的字符串?
EN

Stack Overflow用户
提问于 2019-06-21 21:50:41
回答 2查看 3.8K关注 0票数 1

我正在使用来自RESTful应用程序接口的数据,它返回给我字符串和整数值。然而,它似乎返回了一些编码/解码不正确的字符串值(可能)。

预期字符串:

代码语言:javascript
复制
criança

接收到的字符串:

代码语言:javascript
复制
criança

下面是我的代码:

代码语言:javascript
复制
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来处理它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-24 04:03:38

requests库会尝试guess the encoding of the response。可能是requests将响应解码为cp1252 (也就是Windows1252)。

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

代码语言:javascript
复制
>>> 'criança'.encode('cp1252').decode('utf-8')
'criança'

在此基础上,我猜如果您询问response对象猜测了什么编码,它会告诉您cp1252

代码语言:javascript
复制
>>> response.encoding
'cp1252'

强制requests解码为utf-8,如下所示,可能会解决您的问题:

代码语言:javascript
复制
>>> response.encoding = 'utf-8'
票数 0
EN

Stack Overflow用户

发布于 2020-05-10 20:03:03

如果问题仍然存在,请将项目复制到其他文件夹,然后使用不同的项目文件名重新导入项目。首先重启你的Android Studio,然后从不同的文件夹导入项目,你应该已经解决了这个问题!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56704778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档