code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IE9で日本語(自動選択)にするとUTF-8のページが文字化けする

どこのUTF-8で書かれたページを見てもそうなるんだけど、ページを表示させた後、IEでエンコーディングを日本語(自動選択)にすると文字化け(Shift_JIS化)する。IEでエンコーディングを日本語(自動選択)にした後リロードしても文字化け(Shift_JIS化)する。

環境はWindows 7 Professional 64bitのIE9 32bit上でのお話。

ここのMicrosoft Answersに少しヒントがあるんだけど、ベクトルが少しずれていてはっきりとは答えが書いてない。

[日本語 自動選択 IE9]とかで検索すると上部に出てくるBIGLOBEのヘルプページ(?)は『文字化けしたら日本語(自動選択)、それでもダメならシフトJISかEUCを試してね』と解説されているが、完全には説明しきれていない。つまりUnicode(UTF-8)なページは結局文字化け解決しないんじゃないのかな、と思う。そもそもBIGLOBEのトップページはUTF-8なので、その解説のままじゃ化けたままな気がする。

よく考えたら当たり前のことなんだけどUTF-8は日本語特有の文字コードではない。日本語も含んでいるのでややこしいが、IEにおける日本語(自動選択)とはShift_JIS, EUCを指してるっぽい(ISO-2022-JP=JISについては不明)。文字化け関連を説明するヘルプページを作成するときは注意が必要。UTF-8のページに対して日本語(自動選択)を推奨しちゃダメってことでした。

Webサイトが文字化けする時は『シフトJIS』『UTF-8』『EUC』に切り替えて確認しましょう。自動選択は選ぶ必要ない。

レスポンスを返さない画面

実際のWebサイト閲覧というよりは、Webサイト開発中に起こりうる話として、まだコーディングしてない分岐を通ってレスポンスを空で返してしまうことがある。まさに今日遭遇。

サーバー側でレスポンスを返さないと、IEの画面は真っ白になり、ソースコードを見ると次のようになっている。これはIEが勝手に作成するHTMLである。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=shift_jis" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

いくつか試したらcharset=utf-8になることもあった。どういう条件で文字エンコーディングが判定されているのかは謎だが、この状態で例えばサーバー側でレスポンスを返すようプログラムを直してリロードした際、今度はUTF-8のページが返ってくると文字化けが発動した。Shift_JISだと誤解したみたい。

このケースは開発中の時の話で実際の環境では空のページを返すことはないので問題にはならないけど、一概に文字化けがheadタグとかhttpヘッダとかのせいだけではないようだ。

関連記事
タグ:IE9 Microsoft
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。