IEのクセ

 たまにはSEの端くれらしきことを書いてみる。

 IEは、文字セットの自動判別機能があるのに、なぜ「西ヨーロッパ言語」のような日本語とは似ても似つかない言語の文字セットと判別して文字化けすることがあるのだろうか? 昔から何度も疑問に思うことがあったが、最近、その謎が解けた。

 まず、Windowsは日本語の文字セットにShift JISを使っていることになっているが、厳密には違う。つまり、WindowsのShift JISには、Shift JISを拡張した、所謂「機種依存文字」が含まれている。なので、それらを含んだものは、例えばJavaなんかの世界では、「Windows-31J」と呼ばれ、Shift JISとは区別されている。

この「Windows-31J」という名前、IANAという国際組織で認められた正式な名前なのだが・・・これをHTMLのMETAタグのcharsetの指定で使った場合、IEは「そんなもの知らん」と判断し、文字セットを指定していない場合と同じ動作で文字セットを自動判別しようとする。(ちなみに、csWindows31Jと指定すれば理解してくれる。)

 その場合、IEはHTMLの先頭から4096バイトを読み込み、その中にある日本語の文字列を見てEUC-JP、UTF-8、Shift JISなどと判断するわけだが、4096バイト以内に日本語の文字列がない場合、IEからすると、「これは英語、もしくは西ヨーロッパ言語だ」と判断するしかない。

 ところが、先頭の方に日本語が使われているのにも関わらず、文字セットの自動判別に失敗することがある。これはIEのバージョンにもよるのかも知れないが・・・いろいろ実験を繰り返すと、先頭から4096バイト目がJava ScriptのSCRIPTタグ内の場合、文字セットの自動判別に失敗することが分かった。というわけで、コメント等を挿入して4096バイト目がSCRIPTタグ内から外れるようにしたら直ったのだが・・・うーむ・・・いいのか、こんなので・・・

 まぁ、ただの偶然の産物かも知れないので、この内容について、保証はいたしかねる・・・が、日ごろから仕事中にあちこちのサイトやブログで情報を集めたりしているので、たまには世間様に恩返しをしてみる。

 もし、世間のどなたかが、ドツボにハマってる時にこれを見つけて、解決することがあったら幸い。

2 Comments to “IEのクセ”

  1. By ゆっか, 2010/02/02 @ 16:14

    おかげさまで解決しました!
    IE8でもこの「仕様」は「健在」です。
    ありがとうございました。

  2. By 杉蔵, 2010/02/07 @ 10:50

    コメントありがとうございます。

    お役に立てたのなら、なによりです。

    そうですか…いまだに直ってないんですか…
    なにやってんだ、M$…

この投稿へのコメントの RSS フィード。 TrackBack URI

Leave a Reply