Encoding IWebBrowser:从流加载html时如何指定编码?

Encoding IWebBrowser:从流加载html时如何指定编码?,encoding,mshtml,istream,iwebbrowser2,Encoding,Mshtml,Istream,Iwebbrowser2,使用中的概念,使用web浏览器的界面将HTML内容从加载到中: 伪代码: 如何在IStream中指定html的编码?IStream将包含一系列字节,但问题是这些字节代表什么?例如,它们可以包含以下字节: 每个字节表示当前Windows代码页中的一个字符(例如1252) 每个字节可以表示ISO-8859-1字符集中的一个字符 字节可以表示UTF-8编码的字符 每2个字节可以表示一个字符,使用UTF-16编码 在我的特殊情况下,我向IWebBrowser提供了一个包含一系列双字节字符(UTF-1

使用中的概念,使用web浏览器的界面将HTML内容从加载到中:

伪代码: 如何在IStream中指定html的编码?IStream将包含一系列字节,但问题是这些字节代表什么?例如,它们可以包含以下字节:

  • 每个字节表示当前Windows代码页中的一个字符(例如1252)
  • 每个字节可以表示ISO-8859-1字符集中的一个字符
  • 字节可以表示UTF-8编码的字符
  • 每2个字节可以表示一个字符,使用UTF-16编码
在我的特殊情况下,我向IWebBrowser提供了一个包含一系列双字节字符(UTF-16)的IStream,但浏览器(错误地)认为UTF-8编码有效。这会导致字符混乱

解决方案 问题是如何指定编码,在我的特殊情况下,仅使用UTF-16编码,但有一个简单的解决方法。添加0xFEFF字节顺序标记(BOM)表示文本为UTF-16 unicode。ie然后使用正确的编码并正确显示文本

当然,如果对文本进行编码(例如,使用以下代码),这将不起作用:

  • 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

    • IE的文档也支持IPersistMoniker加载。IE用于下载。您可以用自己的名字对象替换url名字对象。关于URL名字对象实现的一些细节可以在下面找到。查看在调用BindToStroage实现时是否可以从绑定上下文获取IHTTPNegotiate。

      IE的文档也支持IPersistMoniker加载。IE用于下载。您可以用自己的名字对象替换url名字对象。关于URL名字对象实现的一些细节可以在下面找到。查看在调用BindToStroage implementation时,是否可以从绑定上下文中获取IHTTPNegotiate。

      如果不知道名字对象是什么以及为什么需要名字对象,我将无法继续。所有链接的资源都假设我知道它是什么,或者它的用途是什么。请参阅monikes(COM基础知识),我的意思是,你能发布解决问题的代码吗。我能读到所有这些,但我不明白它是如何解决我的问题的。我不知道什么是绰号,为什么我会想要一个绰号,我就无法继续。所有链接的资源都假设我知道它是什么,或者它的用途是什么。请参阅monikes(COM基础知识),我的意思是,你能发布解决问题的代码吗。我能读懂所有这些,但我不明白它是如何解决我的问题的。
      void LoadWebBrowserFromStream(IWebBrowser webBrowser, IStream stream)
      {
         IPersistStreamInit persist = webBrowser.Document as IPersistStreamInit;
         persist.Load(stream);
      }