2017-07-17 148 views
0

我对Python很新,请帮我解决这个问题。Python - 解码('utf-8')问题

我想从下面的链接收入:

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

我使用下面的命令:

进口重新

进口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

+0

你确定它是utf8编码? –

+0

'print(type(data))'show what?我是否也可以认为这是Python 2.7? – Grimmy

回答

0

与请求也许更好:

import requests 

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

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

快速浏览一下链接的网页上显示,它的确是latin1的编码 - 但我得到了一个法语版...

当你不知道确切的皈依的规则是使用替代错误处理:

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

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

0

下载问题中给出的具体URL的结果是HTML代码。我能够使用BeautifulSoup使用下面的Python代码来获取数据后刮页:

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()的语法可能会有所不同。