38127


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

[code]

    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
    
[/code]

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

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


CC BY-SA 3.0
2017-09-22T09:45:48.673
38115
2017-09-22T23:57:04.320
25434
question
html python3
エンコーディングされている文字コードはどのように確認できますか？


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

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

[code]

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

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

でも、Pythonの[urllib.requestの公式ドキュメント](http://docs.python.jp/3.6/library/urllib.request.html)の冒頭に"お奨めです"と
**書いてある** とおり、requestsライブラリを使った方が、自分で頑張るよりずっとずっとお奨めです。

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

[code]

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

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


CC BY-SA 3.0
2017-09-22T14:18:54.720
38127
2017-09-22T23:57:04.320
2017-09-22T23:57:04.320
12274
12274
38115
answer