怎么把HTML插入TWebBrowser而不会出现乱码? ( 积分: 59 )

  • 主题发起人 主题发起人 MyDelphiPower
  • 开始时间 开始时间
M

MyDelphiPower

Unregistered / Unconfirmed
GUEST, unregistred user!
有TWebBrowser打开一个网站后,先在TWebBrowser里插入一些HTML,但出现乱码,我现在的做法是:先获取网页的内容再在再接上我要加上的内容,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
begin
//打开GOOGLE
WebBrowser1.Navigate('www.google.com');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
str,strHtml:string;
all:IHTMLElementCollection;
item:OleVariant;
begin

HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
all:= HTMLDocument.all;
item:=all.item(0,varEmpty);
str:=item.outerhtml;

v := VarArrayCreate([0, 0], varVariant);
v[0] := 新增加的内容'' + str;
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;

end;

另外,我发现,就算不接上新增加的内容,获取网页代码后又直接写回TWebBrowser也会出现乱码
 
果然是无人能解决
 
是阿这么简单的问题,谁也不愿意解决它.

str:=item.outerhtml;//这里都没有做编码 转换 嘿嘿

//////
v := VarArrayCreate([0, 0], varVariant);
v[0] := 新增加的内容'' + str;//这里就直接操作了,不乱码才怪.
 
谢谢楼上的,能不能再帮彻底点,我也知道要转编码,咋转呢?
 
再啰嗦两句,google的页面是utf-8格式,怎么转成Ansi格式,Delphi中也有函数,具体函数名称偶忘记了,你查一下DFW离线包应该能查到.
 
编码的问题要做到通用还是用点麻烦的,建议参考Indy中的IdHttp相关代码

else if SameText(AHeaders.Values['Content-Encoding'], 'gzip') then
begin
IdZLibEx.DecompressGZipStream(VStream, MemStream);
SetString(S, PChar(MemStream.Memory), MemStream.Size);
end
else begin
MemStream.CopyFrom(VStream, 0);
VStream.Position := 0;
SetString(S, PChar(MemStream.Memory), MemStream.Size);
S := UTF8Decode(S);
end;
 
这是关于HTML编码的问题,显式地声明为GB2312即可解决这个问题.
 
后退
顶部