HTML文書は文字エンコーディングUTF-8でなければなりませんという記事があり、混乱があるようなのでHTMLについてHTML5とHTML Living Standard(以下HTML LSと省略)について、そしてHTMLファイルの文字コードをどうするかについて、まとめておきます。
TL;DR
- HTMLファイルの文字コードはHTML Living Standardに従ってUTF-8にする
- 古いSJISやEUC-JPのHTMLファイルをUTF-8に変換する必要はない
What is "HTML" ?
一般にHTMLと呼ばれる規格には複数あります。
- HTML4.01を含むそれ以前のHTML (W3C)
- XHTML1.1 (W3C)
- HTML5.1 (W3C)
- HTML Living Standard (WHATWG)
まず一旦古い話は置いておいて、HTML5とHTML LSについて考えることにします。 以下「HTML5」は特筆なき場合「W3Cの勧告したHTML5.1」の意味です。また、HTML5の日本語訳へのリンク先は5.0の文書ですのでご注意下さい。
HTML5(W3C) とHTML LS(WHATWG)の違い
HTML5とHTML LSは基本的には違いはありません。
1.2 Is this HTML5? - HTML Living Standard(1.2 これはHTML5か? ― HTML Living Standard 日本語訳)
にあるようにWHATWGの策定したHTML LSに基いてW3CがHTML5として勧告を出しています。
そもそもWHATWGはW3CがHTMLをアップデートしないのに業を煮やしたAppleやMozilla、Operaによって設立されました。それを後にW3Cが取り込んだのが規格としてのHTML5となります。
経緯は1.6 歴史 ― HTML Living Standardを参照するのが良いでしょう。
W3CとWHATWGのどちらに従うべきか
ブラウザの実装による、と言ってしまえばそれまでですが、基本的にHTML Living Standardを守れば良いです。ブラウザの実装もこれに則っています。またW3CではHTML LSに基いているだけで、全く同一ではありません。また、標準化のタイミングも異なります。
- HTML LSで標準化済みで、HTML5で勧告済み(多くの基本的な内容)
- HTML LSで標準化済みだが、W3Cでは未勧告(最新の内容)
- HTML LSで標準化済みだが、W3Cでは違いがある(一部の内容)
という3つのパターンがありえます。
3.については1.12 About this document - HTML5.1に列挙されています。
やっと文字コードの話
再掲になりますがHTML文書は文字エンコーディングUTF-8でなければなりませんの文字エンコーディングの話は
- WHATWGでHTML Living Standardの話
- W3Cでは未勧告(まだissueが切られただけ)
となります。
つまり、HTML4.01やXHTMLは関係がないので、古いサイトの文字コードをUTF-8に変換する必要はありません。
BOMについては、UTF-8についてはBOMをつけることが許可されているので、つけても良いですが、つけなくて良いでしょう。<meta charset="utf-8">
のようにmetaタグで文字コードを指定することも禁止されていません。(が、当然ファイルそのものの文字コードと一致する必要があります。)
逆に他のSJISやUTF-16などの文字コードが利用できないかについては、HTML LSでは
the actual character encoding used to encode the document must be UTF-8.
4.2.5.5 Specifying the document's character encoding - HTML Living Standard
とあり、一方HTML5の現状では
Authors should use UTF-8. Conformance checkers may advise authors against using legacy encodings.
(中略)
Authors must not use encodings that are not defined in the WHATWG Encoding standard. Additionally, authors should not use ISO-2022-JP.
4.2.5.5 Specifying the document's character encoding - HTML5.1
と微妙に差異があります。が、これに逆らってUTF-8以外を選択するメリットは殆どないでしょう。
おわりに
Web開発者であれば、WHATWGとW3Cの文章に目を通すようにしましょう。