レスポンスヘッダでの文字コード指定
サイトの HTML ファイルの文字コードを、レスポンスヘッダで指定しましょう。
WWW サーバはユーザエージェント(UA) から要求された HTML や画像などのデータを返します。
このユーザエージェントからの要求を「リクエスト」、サーバから返されるページなどのデータを「レスポンス」といいます。
レスポンスは、HTML や画像だけでなく、「要求されたページが存在しない」というメッセージだったりします。
レスポンスヘッダはレスポンスの先頭につけられる情報です。
さて、通常、レスポンスヘッダは、次のような形になります。
HTTP/1.1 200 OK Date: Thu, 20 Mar 2003 11:03:45 GMT Server: Apache Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT Connection: close Content-Type: text/html
この例では、 Content-Type の値に、JIS, シフトJIS, EUC, Unicode などの文字コードが出力されていませんので、
レスポンスを受け取るユーザエージェントは、HTML ファイルの中身を見なければ文字コードが判りません。
多くのブラウザには文字コード自動判別機能が備わっていますが、うまく働かないことがあり、これは文字化けの要因となります。
WWW サーバが Apache の場合、
HTML ファイルで使われている文字コードがシフトJISであれば、
httpd.conf ファイル、または、.htaccess ファイルに次のような記述をするだけです。
AddType "text/html; charset=Shift_JIS" html
すると、レスポンスヘッダに文字コードが出力されます。
HTTP/1.1 200 OK Date: Thu, 20 Mar 2003 11:03:45 GMT Server: Apache Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT Connection: close Content-Type: text/html; charset=shift_jis
ユーザエージェントは、このレスポンスヘッダを受け取り、データの中身を解析する前に文字コードを知ることが出来ます。
もちろん、実際の HTML に使われているのと同じ文字コードを指定しておかなければなりません。
ところで、文字化けをしないようにと、HTML ソース内に、meta 要素で次のような指定している方も多いでしょう。
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS" />
この記述をブラウザが解釈して、文字コードを適切にセットしてくれると、一般的に言われています。
間違いではないのですが、本来はそのための記述ではありません。
元々は、送信側の WWW サーバが、「meta 要素で指定された文字コードをレスポンスヘッダにセットして返す」ためのものです。
しかし、この様な動作をする WWW サーバはほとんど無いので、受信側のブラウザが文字コード判別に利用しているの現状です。
レスポンスヘッダの指定が可能であれば、そちらを設定する方が望ましいのですが、
ローカルに保存した HTML ファイルの利用なども考えると、
レスポンスヘッダと meta 要素の双方で指定しておくのが最善の方法と言えるでしょう。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.