[英]Python error with decode utf-8 and Japanese characters
Traceback (most recent call last):
File "C:\Program Files (x86)\Python\Projects\test.py", line 70, in <module>
html = urlopen("https://www.google.co.jp/").read().decode('utf-8')
File "C:\Program Files (x86)\Python\lib\http\client.py", line 506, in read
return self._readall_chunked()
File "C:\Program Files (x86)\Python\lib\http\client.py", line 592, in _readall_chunked
value.append(self._safe_read(chunk_left))
File "C:\Program Files (x86)\Python\lib\http\client.py", line 664, in _safe_read
raise IncompleteRead(b''.join(s), amt)
http.client.IncompleteRead: IncompleteRead(5034 bytes read, 3158 more expected)
因此,我嘗試從網站獲取數據,但似乎每當遇到日語字符或其他不可讀字符時,都會出現此錯誤。 我正在使用的只是urlopen和.read()。decode('utf-8')。 有什么辦法可以讓我忽略所有這些或替換它們,從而沒有錯誤嗎?
在您發布的代碼中,字符編碼沒有問題。 相反,您在獲取整個HTTP響應時遇到了問題。 (仔細查看錯誤消息。)
我在交互式Python shell中嘗試了此操作:
>>> import urllib2
>>> url = urllib2.urlopen("https://www.google.co.jp/")
>>> body = url.read()
>>> len(body)
11155
這工作了。
>>> body.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x90 in position 102: invalid start byte
好的,確實存在編碼錯誤。
>>> url.headers['Content-Type']
'text/html; charset=Shift_JIS'
這是因為您的HTTP響應不是使用UTF-8編碼,而是使用Shift-JIS編碼。
您可能不應使用urllib2
而應使用負責HTTP編碼的更高級別的庫。 或者,如果您想自己做,請參見https://stackoverflow.com/a/20714761 。
使用請求和BeautifulSoup :
import requests
r = requests.get("https://www.google.co.jp/")
soup = BeautifulSoup(r.content)
print soup.find_all("p")
[<p style="color:#767676;font-size:8pt">© 2013 - <a href="/intl/ja/policies/">プライバシーと利用規約</a></p>]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.