HTMLの中に文字コードが書いていない場合は、ちょっと困ります。HTTPヘッダーに文字コードが書かれていればそれを信用するかどうかが迷うところです。あんまり信用したくありません。でも、大きなところではYahoo!Japanのニュースのブログ/意見は文字コードはHTMLにかいていません。HTTPヘッダーにはちゃんと指定してあります。でも、これはYahoo!Japanだからかな。
で仕方なく文字コードの自動判定に落ち着く訳です。Pythonで文字コードの自動判定って何がいいのか、Googleさんに聞くと、Universal Encoding Detectorにしなさいとおっしゃいます。feedparser作っているとこですね。他のはpykfなど日本語に特化したものとかありましたが、日本語だけに特化しているのはちょっとさけたかったので、お告げに従いました。pip install chardetでインストールして、試してみます。手もとにあるちょっといやんなサイトのリストをまわしてみるとちゃんと判定してくれています。こんな感じ。
import chardet import urllib2 my_urls = [...省略...] for url in my_urls: res = urllib2.urlopen(url) print chardet.detect(res.read())
先ほどのYahoo!の場合だと{'confidence': 0.98999999999999999, 'encoding': 'EUC-JP'}と出力されます。確かにあってます。
IBMの文字コードの自動判定するライブラリと比べると、多分100%はあり得ないと思っているので、候補をリストで出してくれたり、フォールバック先を指定できたりするとうれしいかな。フォールバック先はconfidenceの値をみて、閾値以下だと自分でフォールバック先のエンコーディングを使用すればいいのかな?
0 件のコメント:
コメントを投稿