HTML5で文字エンコーディングを指定する。推奨される書き方はどっち?
解説
HTML5では<meta charset="UTF-8">が推奨される書き方です。HTML5で新たに導入された短縮構文で、HTML仕様(WHATWG HTML Living Standard)でもこの形式が使われています。選択肢Aのhttp-equivを使った書き方はHTML4時代の記法で、HTML5でも動作はしますが、冗長なため積極的に選ぶ理由はありません。選択肢Cの「全く同じ」は不正確です。ブラウザの処理結果としてはどちらもUTF-8が適用されますが、仕様上の扱いや記述の簡潔さに差があります。また選択肢Dの「HTTPヘッダーでのみ指定すべき」も誤りです。HTTPヘッダーでのContent-Type指定は有効ですが、HTMLファイルをローカルで開いた場合やキャッシュされた場合にはHTTPヘッダーが参照されないため、meta要素での指定は依然として重要です。meta charsetはどこに書くべきか<meta charset="UTF-8">は<head>内のできるだけ先頭に書くのが鉄則です。HTML仕様では、文字エンコーディングの宣言はファイル先頭から1024バイト以内に含まれている必要があると定められています。<!DOCTYPE html> <html lang='ja'> <head> <meta charset='UTF-8'> <title>ページタイトル</title> </head>もし<title>や他のmeta要素の後ろに置いてしまうと、ブラウザがエンコーディングを確定する前にそれらの要素を解析してしまい、日本語のタイトルが文字化けするケースがあります。<meta charset>は<head>の最初の子要素として書く癖をつけておくと安全です。HTTPヘッダーとmeta要素が矛盾したらどうなるかサーバーが送るContent-Typeヘッダーにcharsetが含まれている場合、HTTPヘッダーのほうが優先されます。たとえばサーバーがContent-Type: text/html; charset=Shift_JISを返し、HTML内に<meta charset="UTF-8">があると、ブラウザはShift_JISとして解釈します。この挙動が原因で「HTMLにはUTF-8と書いてあるのに文字化けする」というトラブルが起きることがあります。文字化けの調査時は、ブラウザの開発者ツールでレスポンスヘッダーのContent-Typeを確認するのが最初のステップです。UTF-8以外を指定するケースはあるか現在のWeb開発では、UTF-8一択と考えて問題ありません。WHATWG HTML仕様でもUTF-8の使用が強く推奨されており、新規でShift_JISやEUC-JPを選ぶ理由はほぼありません。レガシーなシステムを保守する場合を除き、<meta charset="UTF-8">を機械的に書いて問題ないでしょう。なおCSS・JavaScriptなどの外部ファイルにはmeta要素は使えません。これらのファイルの文字エンコーディングは、HTTPヘッダーか、<script>・<link>要素のcharset属性(現在は非推奨)、もしくはBOM(Byte Order Mark)で判定されます。外部ファイルもUTF-8で保存しておけば、実務上トラブルになることはほとんどありません。