簡體   English   中英

解碼utf-8和日語字符的Python錯誤

[英]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.

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