HTML5を使うならHTTPヘッダで文字符号化方式を指定しよう
HTML文書を公開するとき、通常はHTTPヘッダで Content-Type を送信することにより文字符号化方式を指定します。UTF-8の場合、次のようになります。
Content-Type: text/html; charset=UTF-8
また、HTMLのmeta要素を使って指定することもでき、次のように書きます。
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
HTML5では、charset属性を使って次の書き方もできるようになりました。
<meta charset="UTF-8" />
ところが、一部のブラウザはこれを認識しないようです。たとえばこんなHTMLの場合。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>HTML5を使うならHTTPヘッダで文字符号化方式を指定しよう</title>
</head>
<body>
<p>この文書の文字符号化方式は UTF-8 です。</p>
</body>
</html>
これをLynxで読み込ませると、こうなります。
Shift_JISで表示させようとしているのですかね。コンテンツ部分が「縺薙・譁・嶌縺」(以下略)と見事に文字化けしてしまいました…。
残念なことに、このような状態になっているサイトは少なくありません。勢い勇んでHTML5を導入する前に、きちんと互換性の検証を行ってほしいものです。
もちろん、HTTPヘッダで Content-Type を指定してやればこのような事態にはなりません。もしサーバーがApacheで動いているのなら、AddType ディレクティブ(httpd.apache.org
)を使って次の一行を書けば解決です。
AddType "text/html; charset=UTF-8" .html
レンタルサーバーなどで、 httpd.conf を書き換えたり .htaccess の設置ができない場合は…、仕方がないのでmeta要素のhttp-equiv属性を使った旧来の方法で指定するしかないでしょうね。