エンコーディングされている文字コードはどのように確認できますか?

投稿者: Anonymous

python3.xにおいて、urllib.requestモジュールを使用して、得られたデータをutf-8でデコードしたところ以下のようなエラーが発生しました。

f = urllib.request.urlopen('http://www.google.com')
text = f.read().decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 102: invalid start byte

つきましては以下2点をお教えください。
・エラーの原因はアクセスしたURLで得られたHTMLファイルの文字コードがUTF-8ではないからという理解であっていますか?
・アクセス先のウェブページの文字コードの確認はどのようにすれば良いのでしょうか?

よろしくお願いいたします。

解決

そうですね。確認すると確かにShiftJISで書かれています。

標準ライブラリで頑張るなら、

import cgi
_v, param = cgi.parse_header(f.getheader('Content-Type') or '')
text = f.read().decode(param.get('charset', 'utf-8'))

とでもするといいでしょうか。

でも、Pythonのurllib.requestの公式ドキュメントの冒頭に”お奨めです”と書いてあるとおり、requestsライブラリを使った方が、自分で頑張るよりずっとずっとお奨めです。

http://docs.python-requests.org/en/master/

import requests
r =requests.get('https://www.google.co.jp/')
text = r.text

自分で何かをする必要はありません。これで十分です。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *