Internet Explorer で、誤った文字セットを使用して HTML ページがレンダリングされる


現象


Microsoft Internet Explorer で HTML ページがレンダリングされるときに、誤った文字セットが使用されることがあります。 HTML ページの META タグで適切な文字セットが指定されている場合でも、Internet Explorer で誤った文字セットが使用されることがあります。

たとえば、以下のように HTML ページの META タグで UTF-8 が指定されている場合でも、Internet Explorer で日本語の HTML ページが Shift-JIS 文字セットを使用してレンダリングされることがあります。

<META http-equiv=Content-Type content="text/html; charset=utf-8">

原因


この問題は、以下のいずれかまたは複数の状況に該当する場合に発生することがあります。

  • Internet Explorer で [自動選択] 設定を無効にする。 この設定を有効にすると、HTML ページで使用されているコードページが Internet Explorer により判断されます。
  • システム ロケール設定が META タグで指定されている文字セットと異なる。
  • 文字セットを指定する META タグが、MSHTML によって解析される HTML データの最初のチャンクにない。 通常では、これは、META タグがデータの先頭 4 KB のうち先頭 256 バイトより後ろの部分にあることを意味します。


  • サーバーが低速のシステムであるか、サーバーにより HTTP 応答の最初の部分が破損しているため、応答に META タグが含まれない。 この問題は、チャンク エンコードが有効な場合に発生することがあります。
  • Internet Explorer で IMultiLanguage::ConvertStringToUnicode メソッドに解析対象の最初のチャンクが渡される場合に、変換が実行できない。


注: これらの他にも、この問題が発生する可能性がある条件があります。 しかし、それらの条件はコード固有のものであるため、ここには掲載されていません。

解決方法


この問題を解決するには、以下のいずれかの方法を使用します。

  • Internet Explorer で [自動選択] 設定を無効にする。
  • HTTP ヘッダーで文字セットを指定する。
  • META タグを、MSHTML により解析されるデータの先頭 1 KB 内に移動する。 パーサーが 1 回に読み込むデータ量が不明の場合でも、META タグがこの場所にあれば問題は解決します。
  • サーバーの初期 HTTP 応答のサイズを大きくする。 初期サイズは少なくとも 1 KB 以上とする必要があります。
  • システム ロケール設定が HTML ページで指定されている META タグの文字セットと一致することを確認する。