久保家 > PC日記 > Internet Explorerのユニコードに降参

 WAKWAKでCGIが使えるのがわかったのでCGIスクリプトで遊んでいた。「とほほのWWW入門」を参考にスクリプトを修正している。

 cookieへの書込み、CGIスクリプトに渡す引数は基本的には特殊文字、日本語は%95%DBのようなコードにエンコードしなくてはならない。また、FORMタグで入力されたものは自動的にエンコードされる。そして受け取ったほうはデコードして使用する。

 JavaScriptではescape()でエンコード、unescape()でデコードできる。上記「とほほのWWW入門」を参考にCGIスクリプトでデコードを試みたが、期待した結果は得られない。

 Internet Explorer4.0以降ではユニコードが使用されているため、CGIスクリプトでのデコードができない。cookie、CGIスクリプトに渡す引数をJavaScriptのescape()でエンコードしたものは%u4FDDのようにユニコードでエンコードされる。しかし、FORMタグに入力されたものはシフトJISでCGIスクリプトに渡される。

 ユニコードとJISコードは全く互換性がなく、ユニコードからJISコードへの変換にあたっては変換表による変換しか方法がないようだ。

 独自に変換表を作成しようと思っても、6,000種類もあるのでは・・・・。

 苦肉の策としては、エンコードしないでcookieの作成や、引数として利用する方法がある。しかし、この方法だと転送中に文字化けしたりする恐れがあるらしい。

 しかし、これはJaveScriptの問題ではないのか??JaveScriptでエンコードしなければいいんだから。でもJavaScriptでキャラクターコードを調べるとユニコードで返される。

 結論、CGIスクリプトでは漢字をユニコードに変換したものはデコードできない。FORMタグを使用したものは可能。

 しかし、ホームページだって漢字を使っているし、勝手にサーバー側で文字を変換していないんでしょうか・・・・。でも、FORMタグはブラウザが確かに文字を変換しているし・・・・。

 ユニコードからJIS、シフトJISへ変換するパールのライブラリが何処かにある人はぜひともご一報ください。お待ち申し上げています。