レスポンスヘッダでの文字コード指定

2003-3-20 00:00
このエントリーをはてなブックマークに追加

サイトの 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 要素の双方で指定しておくのが最善の方法と言えるでしょう。

  • ブックマーク : アクセス: 51,885回
  • カテゴリー : Apache

コメントはまだありません

コメントはまだありません。

現在、コメントフォームは閉鎖中です。

22 queries. HTML convert time: 0.321 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2013 @ futuremix.org ログイン