* 仕様書

[REFS[
- [5] 
[CITE@en-US-x-hixie[HTML Standard]], [TIME[2025-12-02T11:20:51.000Z]], [TIME[2025-12-07T11:18:38.234Z]] <https://html.spec.whatwg.org/#charset>
- [20] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#read-html>
- [14] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-08-06 23:12:09 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-input-byte-stream>
]REFS]

* 概念

[FIG(short list)[
- [[入力バイトストリーム]]
- [[文字符号化]]
-- [[ASCII互換文字符号化]]
-- [[UTF-16符号化]]
- [[文字符号化宣言]]
- [[確信度]]
- [[文字コード指定メニュー]]
- [[encoding sniffing algorithm]]
- [[a known definite encoding]]

]FIG]

* 文書に対する要件

[SEE[ [[Webにおける文字コード]]も参照。 ]]

[6] 現在の [CITE[HTML Standard]] は、[[文書の[F[文字符号化]]]]を [[UTF-8]]
とし[MUST[なければならない]]と定めています。 [SRC[>>5]]

;; [7] [[文書]]とだけしか限定がないので、 [[HTML文書]]にも [[XHTML文書]]にも適用されます。

[8] [CITE[Encoding Standard]] によると、 その[[符号化ラベル]]は
[CODE[utf-8]] ([[ASCII大文字・小文字不区別])
としなければ[MUST[なりません]]。
[SRC[>>5]]

[9] 
[[著述工具]]は、新しく作成する[[文書の[F[文字符号化]]]]の既定値を [[UTF-8]]
としなければ[MUST[なりません]]。
[SRC[>>5]]

[HISTORY[

[10] 
かつての [CITE[HTML5]] は、 [[UTF-8]] を使う[SHOULD[べき]]とし、
いくつかの[[文字符号化]]は使う[SHOULD[べきではない]]としつつ、
それ以外の[[文字符号化]]を使うことを認めていました。

[11] 
それ以前の [[HTML]] の仕様では任意の[[文字符号化]]の利用が認められていました。

]HISTORY]

* [CODE(MIME)@en[charset]] 引数

[21] [CODE(MIME)@en[[[charset]]]] [[引数]]は、 [[sniffed MIME type]] ではなく、
元々の [[MIME型]]の指定から得ます [SRC[>>20]]。

* prescan / [CODE[<meta charset>]]

** 歴史

- [2] [CITE@en[12526 – Safari ignores encoding description "charset=Shift_JIS" in invalid html]], [TIME[2025-11-16T05:56:47.000Z]] <https://bugs.webkit.org/show_bug.cgi?id=12526>
- [1] [CITE@en[14500 – need to be more generous about charset declaration with meta tag]], [TIME[2025-11-16T05:55:14.000Z]] <https://bugs.webkit.org/show_bug.cgi?id=14500>
- [3] [CITE@en[16621 – WebKit ignores encoding description in invalid HTML if it's too far from the start]], [TIME[2025-11-16T06:05:22.000Z]] <https://bugs.webkit.org/show_bug.cgi?id=16621>
- [4] [CITE@en[24420 – Consider doing encoding detection before decoding starts]], [TIME[2025-11-16T06:06:15.000Z]] <https://bugs.webkit.org/show_bug.cgi?id=24420>


* テストケース

[REFS[
- [15] [CITE[Index of /~wakaba/test/web/html/charset]] ([TIME[2014-08-09 02:05:02 +09:00]] 版) <http://suika.suikawiki.org/~wakaba/test/web/html/charset/>
]REFS]

[31] [[HTML documents misinterpreted by charset sniffer]]

* 歴史

[33] 
[CITE[Welcome to Netscape Navigator 3.0]], [TIME[2024-08-16T11:57:20.000Z]], [TIME[2002-06-30T20:20:49.244Z]] <https://web.archive.org/web/20020630200918/http://wp.netscape.com/eng/mozilla/3.0/relnotes/windows-3.0.html#International>




* 実装

[16] テストケース (>>15) によると ([TIME[2014-08-09T02:27:16.900Z]])、
- [17] [[Chrome]] は [[change the encoding]] で[[文字符号化]]を変更しても、
[[navigate]] を再実行しないようです。 ([[非ASCII文字]]が[[文字符号化宣言]]より前にあると、
[[文字化け]]したまま残ります。) [[Firefox]] は [[navigate]] を再実行します。
- [18] [[Chrome]] は prescan を実行しないようです。 [[Firefox]]
は実行するようです。
- [19] [[Chrome]] も [[Firefox]] も、[[文字符号化宣言]]が [CODE(JS)@en[[[document.write]]]]
由来の時、 [[change the encoding]] しないようです。ただし [[Chrome]] は[[タグ]]の先頭文字、
[[Firefox]] は末尾文字が [CODE(JS)@en[[[document.write]]]] 内かどうかで判断しているようです。

* 関連

[13] [[Encoding Standard]], [[参照処理モデル]], [[XMLにおける文字コード]],
[[MIME charset]] も参照してください。

* メモ


[25] [CITE@en[Update integration with Encoding Standard · whatwg/html@6a31c26]]
([TIME[2016-02-14 18:47:07 +09:00]] 版)
<https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39>

[26] [CITE@en[Regression: do not use "get an output encoding" for decoding · whatwg/html@c36f738]]
([TIME[2016-04-26 20:51:26 +09:00]] 版)
<https://github.com/whatwg/html/commit/c36f7384f1f617b13c68d28b89d850cb18ceadfb>


[30] [CITE@en[Require UTF-8]]
([[sideshowbarker]]著, [TIME[2017-10-06 19:09:17 +09:00]])
<https://github.com/whatwg/html/commit/fae77e3c558b9f083dfb9086752863a4789268f5>

[32] [CITE@en[Give browsing context an explicit container]]
([[annevk]], [TIME[2019-11-22 17:11:31 +09:00]], [TIME[2022-01-13T10:26:34.000Z]])
<https://github.com/whatwg/html/commit/7b4964ad0a953b05738afc66600fa47a4dc8045d>
