竹形誠司 ブログ
Java+MySQL+Tomcat    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
ブラウザのエンコーディングが「西ヨーロッパ」になってしまう場合の対処
by 竹形 誠司[takegata]
ページの内容が日本語なのに、ブラウザで表示するとエンコーディングが「西ヨーロッパ」になってしまって、文字化けしてしまうことがあります。これはサーバー側の問題である場合と、ブラウザ側の問題である場合があります。

文字のエンコーディングの情報は、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分