【調査】文字化け対策(エンコーディング指定)

サイトが文字化けするんですが。。。
エンコーディング指定が効いていないようなんですが。。。
等々の問題ってよくあるので、
文字化け対策について整理してみました。


4つのポイントを押さえておけばOK。


エンコーディング指定の有効順
http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html
下記の順で有効になること
1.HTTPヘッダのエンコーディング指定
 -JSPの場合:pageディレクティブで文字コードを指定する
 -サーブレットの場合:HttpServletResponse.setContentTypeメソッドで文字コードを指定する
2.HTMLヘッダのエンコーディング指定
-metaタグで指定



②metaタグ記述上の注意点
http://www.shtml.jp/mojibake/meta.html
HTMLヘッダのエンコーディング指定は
文字(きっと日本語)が表示される前に書くこと
-metaタグの前にtitleタグを書くと、
  うまく認識できない(場合がある)
  感覚的にはブラウザがよろしくやってくれる場合もある



③標準名(iana)と別名の区別、Windows-31JShift_JISの区別
http://1024x768.blog74.fc2.com/blog-entry-27.html
Windows-31JShift_JISの拡張。
Windows-31JエイリアスはMS932。
Shift_JISエイリアスSJIS
※JDK1.4_1βにてエイリアスの変更があった。



④charsetとpageEncodingの違い
http://www.oracle.co.jp/forum/thread.jspa?threadID=9000850
1.pageEncodingは、JSPコンパイラエンコーディングを教える
2.charsetは、ブラウザにエンコーディングを教える


1.のJSPコンパイラエンコーディングを教えるというのは、JSP
JSP -> JSPコンパイル -> JSPServlet -> Javaコンパイル -> class
という順序を自動でコンパイルしてくれるのですが、このJSPコンパイラ
pageEncoding属性で文字コードを教えます。
例)<%@ page pageEncoding="shift_jis" %>


なので、charsetのみの指定だとpageEncodingがiso-8859-01のままで
文字化けした。などのパターンが良くあります。


2.のcharsetはコンパイラに対して指定するのではなく、あくまでも
ブラウザがどのように対応するか?のようなHTMLのMeta属性のような役割
になります。