使用来自
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