2017-07-17 11 views
0

私はPythonの新機能です。この問題を解決するのを手伝ってください。Python - decode( 'utf-8')issue

私は下のリンクから収入を取得しようとしています:私は、以下の使用しています

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))'は何を表示しますか?これは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 SPACEの文字です。 UTF8では、b'\xc2\xa0'と表されます。あなたが生のバイトとしてそれを見つけるなら、おそらくあなたの入力がUTF8でエンコードされておらずLatin1でエンコードされていることを意味します。

リンク先のページで簡単に見、それが実際にlatin1のエンコードであることを示している - しかし、私はフランス語版を持って...

あなたが正確なconvertionのわからないルールが処理置き換えるエラーを使用することです:

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

次いで、すべての問題のある文字(と表示)交換文字(U + FFFD)で置換されています。ほんの僅かしか見つからない場合は、ページに誤った文字が含まれていることを意味しますが、ASCII以外のほとんどの文字が置き換えられた場合は、エンコードがUTF8でないことを意味します。一般的に、西ヨーロッパの言語ではLatin1ですが、他の言語ではマイルが異なる場合があります。

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()の構文は多少異なる場合があります。