繁体   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