簡體   English   中英

Python - 解碼('utf-8')問題

[英]Python - decode ('utf-8') issue

我是 Python 的新手。請幫我解決這個問題。

我正在嘗試從以下鏈接獲取收入:

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”編解碼器無法解碼位置 10798 中的字節 0xa0:起始字節無效

也許更好的請求:

import requests

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

下載問題中給出的特定 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 是字符 NO-BREAK SPACE。 在 UTF8 中,它表示為b'\xc2\xa0' 如果您發現它是原始字節,則可能意味着您的輸入不是 UTF8 編碼而是 Latin1 編碼。

快速瀏覽一下鏈接頁面就會發現它確實是 latin1 編碼的——但我得到的是法語版本……

當您不確定確切的轉換時,規則是使用替換錯誤處理:

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

然后,所有違規字符都將替換為替換字符 (U+FFFD)(顯示為 �)。 如果只找到幾個,則說明該頁面包含錯誤字符,但如果幾乎所有非 ascii 字符都被替換,則說明編碼不是 UTF8。 如果西歐語言通常是 Latin1,但您的里程可能因其他語言而異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM