読者です 読者をやめる 読者になる 読者になる

Python2 encode問題

Pythonのversion 2.7.10でやってます。

先日、webページを解析しようとして、エンコード周りではまりました。

 

エラー内容

UnicodeEncodeError: 'ascii' codec can't encode characters in position 677-694: ordinal not in range(128)

 

結論

print (response.read().decode("euc-jp"))だと失敗して

print (response.read().decode("euc-jp").encode("utf-8"))なら成功しました。

また、下の方法でも成功しました。

print (unicode(res.read(), "euc-jp", "ignore").encode('utf-8'))

 

経緯

webページをurllib2で取得して、printしたら文字化けしていた。

普通にデコードしようとして

print (response.read()).decode("euc-jp")

ってやったらエラーがでた。

全然原因がわからなくて、Python3に変えようかと思ったが、

urllib周りががっつり変わってたので、Python3をやめて、

エンコード問題と戦うことにした。

 

結果、色々ググって他の人のコードを読んでいると、

以下の様にしていたので、これでいけるのかなと思って試したらいけました。

print (unicode(res.read(), "euc-jp", "ignore").encode('utf-8'))

なぜ、成功するのか理由はわかりませんでした。