久保家 > PC日記 > Internet Explorerのユニコード対策

 InternetExplorerのユニコードで問題となるのは、漢字、半角カタカナを使用し、
1.CGIでCOOKIEをエンコードする。
2.CGIで引数をエンコードする。
上記2点でCGI側でユニコードからシフトJISコードへ変換を行えないことにある。ユニコード、JIS、シフトJISへの変換表はEXCELで作成した。その結果全くと言うほど従来との互換性はないように思われる。私の記憶ではマイクロソフト社がシフトJISを考え出したのだと思うのだが・・・・。まっ、本国のマイクロソフト社ではなく日本マイクロソフト社だとは思いますが・・・・。

 JavaScriptで文字コードを調査すると

<SCRIPT language="JavaScript">
<!--
document.write("あ".charCodeAt(0))
//-->
</SCRIPT>

12354(0x3042)が返される。したがってJavaScriptではユニコードでの文字コードしかわからないため、ユニコードからシフトJISへ変換することは困難である。

 残された方法はperlで変換するしか無い!が、perlでのライブラリも見つけることはできなかった。「とほほのWWW入門」でもこれ以上先のことは書かれていなかった。何しろ1文字ずつ変換する変換表の文字部分だけでも、7,326文字2バイト文字だから14,652byteも必要になる。まして、変換のルールが一定ではないため、perlスクリプトも相当複雑になるに違いない。しかし、変換コード表を作成するために使用したEXCELではユニコードからシフトJISコードに変換することができるわけだから、InternetExplorerのVBscriptが利用できないだろうか?また、ブラウザ上でJavaScriptとVBscriptが共存できるかわからなかった。試しに、

<SCRIPT language="JavaScript">
<!--
test = "test";
//-->
</SCRIPT>
<SCRIPT language="VBscript">
<!--
Msgbox(test)
-->

を実行するとJavaScriptの変数をVBscriptで参照することができる。また、VBscriptの変数もJavaScriptで参照できる。それどころか

<SCRIPT language="VBscript">
<!--
Function test()
test = "ZZZ"
End Function -->
</SCRIPT>
<SCRIPT language="JavaScript">
<!--
alert(test);
//-->
</SCRIPT>

でVBscriptの関数をJavaScriptで呼び出すことさえ可能だ。

 VBscriptではAsc(string)でシフトJISの文字コードがAscW(string)でユニコードの文字コードが返される。VBescape()とVBunescape()を作成すれば、CGIでデコードできそうだ。

使用方法:

<SCRIPT language="JavaScript">
<!--
v = false;
//-->
</SCRIPT>
<SCRIPT language="VBscript">
<!--
v = true;
-->
</SCRIPT>
<SCRIPT language="JavaScript">
<!--
VBUNI = "あ".charCodeAt(0) == 12354 && v;
//-->
</SCRIPT>

のようにJavaScriptで変数v=falseと定義してVBscriptでv=trueに定義し直し、VBscriptが使用可能か調査する。さらにJavaScriptで"あ"の文字コードがユニコードの12354か調査し、VBscriptが使用可能で、文字コードがユニコードの場合に VBUNI = true にセットされる。エンコード、デコードしたい位置で
(JavaScriptの場合)

if( VBUNI ){
   tmp = VBescape(tmp2);
}else{
   tmp = escape(tmp2);
}

のようにVBUNIを参照し、escape()、unescape()を使うかVBescape()、VBunescape()を使うか処理を分岐させる。

 escape()コマンドでエンコードされない文字は英数字と「*」「+」「-」「.」「/」「@」「_」の69文字。

 なお、今回の実験は私のWindows 5.00.2195(Win2000) InternetExplorer 5.50.4134.0600(IE5.5)でしか確認していない。InternetExplorerユーザーで当家のホームページでユーザーネームが文字化けする場合はご連絡ください。

ダウンロード ファイル名 サイズ
シフトJIS・JIS・ユニコード変換表(CSV形式) unicode.lzh 75,368byte
VBescape()、VBunescape()(TXT形式) vbscript.lzh 1,094byte