代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

iWebBrowser:如何在从流加载HTML时指定编码?

  •  0
  • Ian Boyd  · 技术社区  · 14 年前

    使用来自 sample code provided by Microsoft 用于将HTML内容加载到 IWebBrowser 从一个 IStream 使用Web浏览器的 IPersistStreamInit 接口:

    pseudocode:

    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编码字符
    • 每2个字节可以表示一个字符,使用utf-16编码

    在我的特殊情况下,我向iWebBrowser提供了一个包含一系列双字节字符(utf-16)的IStream,但是浏览器(错误地)认为utf-8编码是有效的。这会导致字符混乱。

    解决方案

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

    当然,如果对文本进行编码(例如:

    • UCS-2
    • UCS-4
    • ISO-10646-UCS-2标准
    • Unicode-1-1-UTF-8码
    • Unicode-2-0-UTF-16标准
    • Unicode-2-0-UTF-8码
    • 美国ASCII
    • 小精灵
    • ISO-859-2
    • ISO-855-3
    • 小精灵
    • ISO-855-5
    • ISO-855-6
    • ISO-855-7
    • ISO-855-8
    • ISO-855-9
    • Windows 1250
    • Windows 1251
    • Windows 1252
    • Windows 1253
    • 窗1254
    • 窗1255
    • 窗1256
    • Windows 1257
    • 窗1258
    1 回复  |  直到 14 年前
        1
  •  1
  •   Sheng Jiang 蒋晟    14 年前

    IE的文档也支持IPersistMoniker加载。工业工程应用 URL monikers 用于下载。您可以替换url名字对象 created by CreateURLMonikerEx 用你自己的名字。有关url名字对象实现的一些细节可以找到 here . 查看调用bindtostroage实现时是否可以从绑定上下文获取ihttpnegotiate。

    推荐文章