Python - 解码(' utf-8')问题

时间:2017-07-17 14:50:10

标签: python encoding utf-8

我是Python的新手。请帮我解决这个问题。

我想通过以下链接获得收入:

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

我正在使用以下命令:

导入重新

import urllib.request

数据= urllib.request.urlopen(URL).read()

DATA1 = data.decode(" UTF-8&#34)

问题:

  

UnicodeDecodeError:' utf-8'编解码器不能将字节0xa0解码到位   10798:无效的起始字节

3 个答案:

答案 0 :(得分:0)

请求可能更好:

import requests

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

答案 1 :(得分:0)

0xa0或以unicode表示法U + 00A0是字符NO-BREAK SPACE。在UTF8中,它表示为b'\xc2\xa0'。如果您将其视为原始字节,则可能意味着您的输入不是UTF8编码而是Latin1编码。

快速查看链接页面显示它确实是latin1编码 - 但我有一个法语版本......

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

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

然后,所有违规字符都替换为REPLACEMENT CHARACTER(U + FFFD)(显示为 )。如果只找到很少,这意味着页面包含错误的字符,但如果几乎所有非ascii字符被替换,则表示编码不是UTF8。如果西欧语言通常是Latin1,但您的里程可能因其他语言而异。

答案 2 :(得分:0)

下载问题中给出的特定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()的语法可能略有不同。