

初歩的な質問です．python3でurllibを使ってhtmlのコードを取得しようとしています．

[code]

      request = urllib.request.Request(url)
      response = urllib.request.urlopen(request) 
      html = response.read().decode('utf-8')
    
[/code]

上記のようにソースコードを取得しています．取得先のページがutf-8でエンコードされているときはうまく取得できるのですが，shift-
jisでエンコードされている場合

[code]

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 228: invalid start byte
    
[/code]

とエラーが出ます．"bytes型のshift-
jis"を"bytes型のutf-8"に変換してからデコードすればうまくいくと思うのですが，そういった方法は可能でしょうか．


CC BY-SA 3.0
2017-11-02T10:47:47.470
39255
2017-11-02T13:08:27.247
23768
question
python python3
pythonでの”shift-jisのbytes型”から”utf-8の文字列”への変換


単純には`html = response.read().decode('ShiftJIS')`でいいですよね。

どのエンコーディングを使うかを決めるためには、httpのヘッダとか、html要素のlang属性とか、meta要素とか、考えられる限りの情報を見て判断しないといけませんが、そんなことをがんばるぐらいなら、[公式ドキュメント](http://docs.python.jp/3.6/library/urllib.request.html#module-
urllib.request) に **書いてあるとおり** 、Requests を使う方がいいと思いますよ。


CC BY-SA 3.0
2017-11-02T13:08:27.247
39257
2017-11-02T13:08:27.247
12274
39255
answer