民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

help リーダーに追加 RSS Shift_JIS ? UTF-8 ? Internet Explorerの不思議な挙動

<<   作成日時 : 2007/09/06 23:49   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 5 / トラックバック 1 / コメント 8

お仕事中、お客様から電話が入った。こちらから納品したHTMLが文字化けするのだという。UTF-8で作ってあるから、Internet Explorerの「表示」→「エンコード」で「自動選択」にチェックを入れてくださいということでお茶を濁したつもりだった。しかし...

そうすると、今度はお客さんのイントラネット上のデータが文字化けするのだそうだ。
そもそもこちらのデータはMETAタグで charset="UTF-8" を指定しているのだから、「自動選択」になっていてもいなくても「UTF-8」で表示されなければおかしいはずなのだ。実際、Firefoxでは問題なく表示できている。
さらにもう一つ言わせてもらうと、「自動選択」にしたことでお客さんのイントラネットのデータが化けるのもおかしな話なのだ。
というわけでIEの文字コードに関する挙動を調べたら、色々と奇妙なことが判明した。

まず、IE6から。
UTF-8でHTMLを作成する。ただし、文字コード宣言の前に日本語文字を入れる。
例えば
<html>
<head>
<title>日本語</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
というようにしておく。
エンコードを「自動選択」にしておかないとIE6はこれをShift_JISとして認識。ページは文字化けを起こしてしまう(おかしい)。
エンコードを「自動選択」にすると、IE6はこれをUTF-8として認識。ページはきれいに表示される(期待通り)。
しかし、上記のHTMLの<title>と<META>を入れ替え、文字コード宣言の前に日本語の文字が入らないようにすると、エンコードがどうなっていようとIE6はこれをUTF-8として認識。ページはきれいに表示される(期待通りだが...???)

じゃあ、とにかく文字コード宣言の前に日本語の文字を入れなければいいのかと思い、先にMETAタグを置いたファイルを作ってIE7で試してみると、今度は「自動選択」を外した場合に文字化け。挙動が違う。

で、さらなる情報を求めてネットを検索していると
http://support.microsoft.com/kb/413581/ja
というページに行き当たった。

1.IEは、HTMLで文字コード宣言がある場合はその文字コードを使用する

2.HTMLで文字コード宣言がない場合は、「エンコード」メニューでユーザーが最後に指定した文字セットが使用される。

2-1.「エンコード」でユーザーが最後に選択したのが「自動選択」であった場合、IEは表示可能なありとあらゆる文字セットの中から、そのページを表示するのに適切と思われる文字コードを自動的に選択する

2-2.「エンコード」でユーザーが最後に指定したのが「日本語(自動選択)」であった場合、IEはJIS、Shift_JIS、EUCのいずれかから、もっともそのページを表示するのに適切と思われる文字コードを自動的に選択する(UTF-8は候補に含まれていない!)

ということらしい。
これと、今日の実験結果を付き合わせると、文字コード宣言以前に日本語の文字が見つかると、IE6はそのページで「文字コード宣言はなされていない」ことにしてしまうらしい。IE7に至っては何をどう判断しているのかまったく不明だ。

さらに、今日のテストにおいて、条件分けが足りていないことも判明した。
IE6のテストにおいても、IE7のテストにおいても、「最後に選択してあったエンコードが何であったか」にまったく注意していなかった。
明日以降、Internet Explorerのこの挙動について、さらに調査を加えたいと思う。

設定テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 5
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
ナイス ナイス
驚いた

トラックバック(1件)

タイトル (本文) ブログ名/日時
絆の定義
ようやくリニューアル。って、ログイン機構とかを見直したくらいですが。 ...続きを見る
今感じていること
2008/08/13 10:55

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(8件)

内 容 ニックネーム/日時
検索からアクセスさせていただきました。
まったく同じ問題で悩んでいましたので大変助かりました。
ありがとうございます。
タガワ
2007/11/22 11:18
お役に立てて幸いです。
次のサービスパックでIEの挙動がまた変わってしまわないことを祈らないといけませんね。
kazuyoshikakihara
2007/11/23 00:42
私も同様の悩みでこのページに着てしまいました。
情報提供に感謝いたします。
なんとも、MSIEは独自に走りすぎな気がしますね。
FRYBAREC
2008/01/02 22:53
FRYBARECさん、どういたしまして。
個人のメモ書きを公開して意味があるのだろうかと思っていましたが、意外とこの記事は役に立っているようですね。実験した甲斐がありました。
MSIEは6と7で挙動が違うのがまた困りものなのですよね。
kazuyoshikakihara
2008/01/04 23:10
私も同様の問題で検索していたところこちらにたどり着きました。
おかげさまで解決できました。大変感謝しております。
ありがとうございます。
イザワ
2008/02/19 17:33
この記事だけ妙にアクセスが多いので、文章の拙さがだんだん気になってきました。
でも、意図するところは伝わっているようですので、これでもいいのですよね、イザワさん。
kazuyoshikakihara
2008/02/19 23:39
お役に立たないかも知れませんが。
htmlを保存するときに「UTF-8N」とかに出来ませんか。
通常これでいけるかと思いますが...
通りすがり
2008/07/19 18:12
記事を作ったのが少し前のことだったので、あらためて調べなおしました。「UTF-8N」すなわちBOMなしでテストした結果が記事のとおりとなっています。
BOMをつけると、手元のIE6では、エンコードの設定がどうなっていようとも、UTF-8で表示されるようですね。BOMをつけるのが有効な解決策ということですかね。
kazuyoshikakihara
2008/07/20 16:12

コメントする help

ニックネーム
本 文