HTMLの文字エンコーディングはUTF-8でなければならない

3 min read

TL;DR

HTML Living Standard には、文字エンコーディング宣言について以下の定義がある。

Regardless of whether a character encoding declaration is present or not, the actual character encoding used to encode the document must be UTF-8.

[訳]:文字エンコーディング宣言が存在するかどうかにかかわらず、文書のエンコードに使用される実際の文字エンコーディングは UTF-8 でなければならない。

つまり、現在の仕様では、文字エンコーディングは UTF-8 でなければならない。

文字エンコーディング宣言

文字エンコーディング宣言は、meta 要素の charset 属性(<meta charset="utf-8">)を使用する必要がある。

また、宣言はファイルの最初の 1024 バイト以内に収まるように head タグの直後に配置するのが望ましい。理由としては、ブラウザが HTML を解釈する際、ファイルの先頭部分を読み込んで文字エンコーディング宣言を探し、1024 バイト以内に宣言があれば、すぐに宣言を取得して解析処理を開始できるためである。もし、宣言が 1024 バイト以内に存在しない場合は、ドキュメントの続きをさらに読み込んで解析処理を開始する必要があり、遅延する可能性があるからである。

meta charset の指定は必要

規定でエンコーディングが UTF-8 なのであれば、あえて<meta charset="utf-8">の記述をしなくて良いのではないかという思いも出てくる。

以下のような理由から、規定でエンコーディングが UTF-8 であっても、HTML ドキュメントには必ず<meta charset="utf-8">のようなエンコーディング宣言を付ける必要がある。

  • エンコード宣言が存在しなくても、ドキュメントの実際のエンコードが UTF-8 であることを指定する必要があるため
  • ASCII 範囲内の文字のみを含む場合でも、フォーム入力やスクリプトで生成される URL などの非 ASCII 文字の処理に必要なため

参考