Hatena::ブログ(Diary)

latest log このページをアンテナに追加 RSSフィード

2011-07-10

uupaa2011-07-10

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

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 を開き、エンコードを[日本語 (自動選択)] にしたら文字化けしたよ の図

hebikuzurehebikuzure 2011/07/10 22:05 IEの文字エンコード判定はものすごくヒューリスティックな動作をしますね。実際のロジックは「企業秘密」みたいです。
コンディショナルコメントでIEじゃないと答えるのは、もう「腐ったミルク」とは無関係なんだよ、という主張なんでしょう。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

トラックバック - http://d.hatena.ne.jp/uupaa/20110710/1310273381