HTML5の文字エンコーディングの判定は 512byte または 1024byte 以内までに

uupaa2011-07-10


HTML5のWorking Draft(20110113)までは、文字エンコーディング判定の範囲はファイルの先頭512byte以内と定義されていました。

そのため、

<!DOCTYPE html>
<!--[if IE 8 ]><html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" class="ie8"><![endif]-->
<!--[if IE 9 ]><html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" class="ie9"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="ja" xmlns:og="http://ogp.me/ns#" xmlns:mixi="http://mixi-platform.com/ns#" xmlns:fb="http://www.facebook.com/2008/fbml"><!--<![endif]-->
<head>

といった、546byteの文字列の後に

<meta charset="UTF-8">
<title>こんにちは!こんにちは!</title>

とやってしまうと、正しく判定されるのか? ちょっと危うい気がしてしまいます。

http://www.w3.org/TR/2011/WD-html5-diff-20110405/ に書かれているように、
現在では、「512byte」→「1024byte」に改訂されています。
この時期に登場した IE9 はどちらの仕様でビルドされているのでしょうか? ちょっと気になりますね。

また、IE10pp2 からは ↓ のようなコンディショナルコメントは利用できなくなります(スルーされます)。

<!--[if IE 8 ]> <![endif]-->

ここ大事ですので、忘れないようにしましょう。


2011-07-10追記
IE9.01 は 512byte なんだろうか、それとも昔のIEのように、もっと先まで読んで判別しているのだろうか? という所が知りたくて、EUC-JP なファイル等も作ってみたのですが、文字化けしている状態でユーザが正しいエンコードを指定しなおすと、それ以降エンコードのパターンを学習する(またはエンコードに利用するバリエーションが増える)ような動きがあるらしく(その動きもあって、こちらの予想とは違う結果が出てしまう)、なんだかモヤモヤしたままです。

添付画像は、IE9.01 で http://jp.msn.com を開き、エンコードを[日本語 (自動選択)] にしたら文字化けしたよ の図