このブログを検索

2009/12/26

encodeモジュールでのdecode失敗

デコードで失敗する場合がある。

まず、goo.ne.jpの検索文字列はeuc-jpでエンコードされている。

今までは全部utf-8としてデコードしていたが、gooだけはeuc-jpを指定した。 

今までもたびたび失敗する場合があったので調べてみると、googleの検索でもshiftjisになる場合があるようだ。

そして、Encodeモジュールにはguessという、文字コード判別機能がある。 

なんだ、最初からこれを使えばよかった、と、shift-jisとutf-8を判別できるようになった、と思ったら、今度は判別に失敗して死んでしまう場合がある。 

そこで、guessはgoogleだけに使い、guessに失敗したら今までどおりutf-8固定にして、成功したらもう一度guess指定でデコードした。 

成功したときに2回デコードするのがアレだが、とりあえず動くので、後で直す。 

というわけで、いつの間にか、6種類ものサーチエンジンに対応していた。

 google, yahoo, baidu, bing, biglobe, goo 


guessに失敗したときにutf-8にしてもダメな場合がある。euc-jpの場合もあるようだ。

結局、3種類全部試す必要があるのか・・・ 

decodeに失敗すると?がならぶ。いくつ並ぶかはわからないが、とりあえず二つ並んだら失敗とみなせるかな・・・ 

検索すると「失敗することがある」という情報がたくさん見つかるけどさ、これ、単にEncodeのバグじゃないの?