Python-decode('utf-8')问题

2024-04-29 17:11:40 发布

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

我对Python很陌生,请帮我解决这个问题。

我试图从下面的链接中获得收入:

https://www.google.co.in/?gfe_rd=cr&ei=kFFsWYyPEqvM8AeF7Y2IDQ&gws_rd=ssl#q=adp+revenue&stick=H4sIAAAAAAAAAOPgE-LUz9U3MMkozijTUskot9JPzs_JSU0uyczP088vSk_My6xKBHGKrYpSy1LzSlMBIRiSrDMAAAA&spf=1500270991898

我使用以下命令:

导入re

导入urllib.request

data=urllib.request.urlopen(url.read()

data1=data.decode(“utf-8”)

问题:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 10798: invalid start byte


Tags: inhttpsdata链接requestwwwgooglerd
3条回答

下载问题中给出的特定URL的结果是HTML代码。在使用以下Python代码获取数据之后,我可以使用BeautifulSoup来刮页:

import requests

url = "https://www.google.co.in/?gfe_rd=cr&ei=kFFsWYyPEqvM8AeF7Y2IDQ&gws_rd=ssl#q=adp+revenue&stick=H4sIAAAAAAAAAOPgE-LUz9U3MMkozijTUskot9JPzs_JSU0uyczP088vSk_My6xKBHGKrYpSy1LzSlMBIRiSrDMAAAA&spf=1500270991898"

response = requests.get(url)
data = response.content.decode('utf-8', errors="replace")

print (data)

请注意,我在代码示例中使用了Python3。print()的语法可能略有不同。

0xa0或unicode表示法中的U+00A0是字符不间断空格。在UTF8中,它表示为b'\xc2\xa0'。如果您发现它是一个原始字节,这可能意味着您的输入不是UTF8编码,而是Latin1编码。

在链接页面上快速查看显示它确实是拉丁语编码的-但我得到了一个法语版本。。。

不确定确切转换时的规则是使用替换错误处理:

data1=data.decode("utf-8", errors="replace")

然后,所有有问题的字符都被替换字符(U+FFFD)替换(显示为)。如果只找到很少的字符,则表示页面包含错误字符,但如果几乎所有非ascii字符都被替换,则表示编码不是UTF8。对于西欧语言来说,If通常是拉丁语,但对于其他语言,您的里程数可能会有所不同。

如果有要求的话,也许更好:

import requests

url = "https://www.google.co.in/?gfe_r...."
req = requests.get(url)
req.encoding = "utf-8"
data = req.text

相关问题 更多 >