ページの内容が日本語なのに、ブラウザで表示するとエンコーディングが「西ヨーロッパ」になってしまって、文字化けしてしまうことがあります。これはサーバー側の問題である場合と、ブラウザ側の問題である場合があります。
文字のエンコーディングの情報は、HTMLのレスポンスヘッダでサーバーからブラウザへ伝えられます。Tomcatの場合は、pageディレクトリのcontentTypeで指定したエンコーディングが使われます。たとえば、JSPコードで
しかし、Tomcatから.jspではなく、htmlファイルを送信する場合は、デフォルトではHTTPレスポンスヘッダにエンコーディングの情報が含まれません(設定する方法があるのかも知れませんが、私はまだ見つけられていません)。
エンコーディングの情報がHTTPレスポンスヘッダに含まれていない場合、ブラウザは自動判定を試みるようですが、ページの先頭にJavaScriptなどが配置されている場合に、自動判定が失敗してしまうことがよくあるようです。
このような場合の次善の策として、HTMLのmeta要素を使う方法があります。HTMLのHEAD要素の中に
MSIE7.0では、こういった問題も解消されているようです。
文字のエンコーディングの情報は、HTMLのレスポンスヘッダでサーバーからブラウザへ伝えられます。Tomcatの場合は、pageディレクトリのcontentTypeで指定したエンコーディングが使われます。たとえば、JSPコードで
<%@ page contentType="text/html; charset=Windows-31J"%>
と指定しておけば、HTTPのレスポンスヘッダにContent-Type: text/html;charset=Windows-31J
という文字列が挿入されます。HTTPのヘッダはFireFoxのLive HTTP Headersというエクステンションを使って表示することができます。しかし、Tomcatから.jspではなく、htmlファイルを送信する場合は、デフォルトではHTTPレスポンスヘッダにエンコーディングの情報が含まれません(設定する方法があるのかも知れませんが、私はまだ見つけられていません)。
エンコーディングの情報がHTTPレスポンスヘッダに含まれていない場合、ブラウザは自動判定を試みるようですが、ページの先頭にJavaScriptなどが配置されている場合に、自動判定が失敗してしまうことがよくあるようです。
このような場合の次善の策として、HTMLのmeta要素を使う方法があります。HTMLのHEAD要素の中に
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; harset=Windows-31J">
のように書いておけば、文字化けを解消できる場合があります。ただし、MSIE6.0(おそらく、それ以前のバージョンも)はWindows-31Jというエンコーディングを認識しないようなので、代わりにShift_JISを指定する必要があるかも知れません。ただ、エンコーディングを正しく解釈するブラウザでは“Shift_JIS”を指定した場合に、丸付き数字や“〜”、“£”などの記号が化けてしまうかも知れません(困ったことです)。MSIE7.0では、こういった問題も解消されているようです。
投稿:竹形 誠司[takegata]/2008年 01月 09日 17時 13分
/更新:2008年 01月 09日 17時 28分