[[diary/Kojima]]
・不明高齢者問題
今日もまた戸籍上だけで生存している150歳だかの高齢者がニュースになっていたけど、
こうまでこの問題ばかり取りあげるのは、マスゴミと行政が手を組んで、
本来問題とすべき年金の不正受給を隠そうとしているようにしか見えんなぁ。。
#comment
・Pythonのchardetモジュール
Pythonの場合、Shift-JISで読み込んだファイルをEUC-JPで書き出すような場合は、
読み込んだデータをいったん内部表現のUTF-8に変換(decode)した上で、
EUC-JPに変換(encode)して書き出す、みたいな作業が必要になるのだけど、
decodeメソッドの引数には Shift-JISやEUC-JPみたいなコーディングを指定しないといけない
(異なるコーディングだと、「このコーディングにはこんなコードはないよ」エラーになる)のはちょっと面倒。
何かいい方法が無いかな、と探してみたら、[[Universal Encoding Detector:http://chardet.feedparser.org/]]
というコーディング判断用のモジュールを見つけた。
元々は Mozilla が使っていたコーディング判別用ルーティンをPythonのモジュールにしたもののようで、
>>> import urllib
>>> rawdata = urllib.urlopen('http://yahoo.co.jp/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'encoding': 'EUC-JP', 'confidence': 0.99}
みたいな感じで、判別したいデータを chardet.detect()に投げてやれば、推測したコーディングの種類とその信頼性を返してくれるらしい。
いくつか試してみた感じでは、短いファイルだと confidence が低いこともあるけど、手近なファイルは間違いなく判別できた
# もっとも、手元には cp932 か UTF-8 か EUC-JP か ISO-2022-JP ぐらいのファイルしかないから、汎用性はよく分からない
これを使えば、読み込んだファイルやURLのコーディングを試行錯誤的に試さなくても、すっきりと decode できそうだ。
#comment