1

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
4

1 に答える 1

1

IE のドキュメントは、IPersistMoniker の読み込みもサポートしています。IE は、ダウンロードにURL モニカを使用します。CreateURLMonikerEx によって作成された URL モニカーを独自のモニカーに置き換えることができます。URL モニカの実装に関する詳細については、こちらを参照してください。BindToStroage 実装が呼び出されたときにバインディング コンテキストから IHTTPNegotiate を取得できるかどうかを確認します。

于 2010-04-14T21:22:36.873 に答える