Web ブラウザのIPersistStreamInitインターフェイスを使用してIStreamからIWebBrowserに HTML コンテンツをロードするために Microsoft が提供するサンプル コードの概念を使用します。
疑似コード:
void LoadWebBrowserFromStream(IWebBrowser webBrowser, IStream stream)
{
IPersistStreamInit persist = webBrowser.Document as IPersistStreamInit;
persist.Load(stream);
}
IStream内でhtmlのエンコーディングを指定するにはどうすればよいですか? IStream には一連のバイトが含まれますが、問題はそれらのバイトが何を表しているかです。たとえば、次のようなバイトを含めることができます。
- 各バイトは、現在の Windows コード ページ (例: 1252) の文字を表します。
- 各バイトは、ISO-8859-1 文字セットの文字を表すことができます
- バイトは UTF-8 でエンコードされた文字を表すことができます
- UTF-16エンコーディングを使用して、2バイトごとに文字を表すことができます
私の特定のケースでは、一連の 2 バイト文字 (UTF-16) を含む IStream を IWebBrowser に提供していますが、ブラウザーは (誤って) UTF-8 エンコーディングが有効であると認識しています。その結果、文字化けが発生します。
回避策
質問ではエンコーディングを指定する方法を尋ねていますが、私の特定のケースでは、UTF-16 エンコーディングのみを使用して、簡単な回避策があります。0xFEFF バイト オーダー マーク (BOM) を追加すると、テキストが UTF-16 Unicode であることを示します。つまり、適切なエンコーディングを使用して、テキストを適切に表示します。
もちろん、テキストがエンコードされている場合は機能しません。たとえば、次のようになります。
- UCS-2
- UCS-4
- ISO-10646-UCS-2
- UNICODE-1-1-UTF-8
- UNICODE-2-0-UTF-16
- UNICODE-2-0-UTF-8
- US-ASCII
- ISO-8859-1
- ISO-8859-2
- ISO-8859-3
- ISO-8859-4
- ISO-8859-5
- ISO-8859-6
- ISO-8859-7
- ISO-8859-8
- ISO-8859-9
- Windows-1250
- Windows-1251
- Windows-1252
- Windows-1253
- Windows-1254
- Windows-1255
- Windows-1256
- Windows-1257
- Windows-1258