2008-03-21
交流DELPHI+idhttp(10.0版本)控件取网页源文件乱码解决方法
关键字: delphi idhttp
我用IDHTTP取目标网页源文件,但对于网页是EUC-JP编码,取出源文件放到memo中显示时是乱码。我再用WebBrowser先显示目标网页,取出源文件显示在memo中正常。
个别朋友可能会说,是因为Memo控件不支持EUC-JP编码的问题导致,开始我也是这样认为,但应该有方法可以在IDHTTP读到源文件后作转换,WebBrowser控件既然可以做到这一点,我想用IDHTTP同样应该是可以的。
我试着设置以下属性,但依然未能解决问题:
IdHTTP.Request.AcceptLanguage := 'ja';
IdHTTP.Request.AcceptEncoding := 'Shift_JIS';
用WebBrowser和IDHTTP两种控件取网页的源文件,对于euc-jp编码的网页为什么用WebBrowser取出的源码可以正常显示,而用IDHTTP取出的源码是乱码,请有经验的DX发表高见。
我现在要用IDHTTP取网页源文件,因为它的好处在可以不用显示网页,速度快,而用WebBrowser要先显示完网页才能读到源文件,效果不如前。
个别朋友可能会说,是因为Memo控件不支持EUC-JP编码的问题导致,开始我也是这样认为,但应该有方法可以在IDHTTP读到源文件后作转换,WebBrowser控件既然可以做到这一点,我想用IDHTTP同样应该是可以的。
我试着设置以下属性,但依然未能解决问题:
IdHTTP.Request.AcceptLanguage := 'ja';
IdHTTP.Request.AcceptEncoding := 'Shift_JIS';
用WebBrowser和IDHTTP两种控件取网页的源文件,对于euc-jp编码的网页为什么用WebBrowser取出的源码可以正常显示,而用IDHTTP取出的源码是乱码,请有经验的DX发表高见。
我现在要用IDHTTP取网页源文件,因为它的好处在可以不用显示网页,速度快,而用WebBrowser要先显示完网页才能读到源文件,效果不如前。
评论
SwiftHorse
2008-03-24
到今天有了新的进展,但也碰到了新的问题。对于日文(Shift-JIS)编码可以正常通过IDHTTP取到正确的源文件,但对于日文EUC編碼去却以下程式不能得到正确结果,不解。贴出我的代码,可以供需要取Shift-JIS编码的朋友参考。
var
IframeUrl: string;
ret:WideString;//TStringStream;
SourceHtmlCode: WideString;
begin
IframeUrl := 'http://ctplp.blog15.fc2.com/blog-entry-33.html';//这个网站是EUC-JS编码
//IframeUrl := 'http://www.nhk.or.jp/furusato/koremade/koremade_ibaraki.html';//这个网站是SHIFT-JS编码
IdHTTP.HandleRedirects:=true;
IdHTTP.Request.ContentType:= 'application/x-www-form-urlencoded';
IdHTTP.Request.UserAgent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)';
IdHTTP.Request.SetHeaders;
try
SourceHtmlCode := StringToWideString(IdHTTP.Get(IframeUrl),51932);//日文EUC編碼是51932 日文(Shift-JIS)是932
Memo1.Lines.Text := SourceHtmlCode;
except
ShowMessage('未找到HTTP服务器');
end;
end;
function StringToWideString(const S: string; CodePage: Word): WideString;
var
InputLength, OutputLength: Integer;
begin
InputLength := Length(S);
OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
SetLength(Result, OutputLength);
MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;
var
IframeUrl: string;
ret:WideString;//TStringStream;
SourceHtmlCode: WideString;
begin
IframeUrl := 'http://ctplp.blog15.fc2.com/blog-entry-33.html';//这个网站是EUC-JS编码
//IframeUrl := 'http://www.nhk.or.jp/furusato/koremade/koremade_ibaraki.html';//这个网站是SHIFT-JS编码
IdHTTP.HandleRedirects:=true;
IdHTTP.Request.ContentType:= 'application/x-www-form-urlencoded';
IdHTTP.Request.UserAgent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)';
IdHTTP.Request.SetHeaders;
try
SourceHtmlCode := StringToWideString(IdHTTP.Get(IframeUrl),51932);//日文EUC編碼是51932 日文(Shift-JIS)是932
Memo1.Lines.Text := SourceHtmlCode;
except
ShowMessage('未找到HTTP服务器');
end;
end;
function StringToWideString(const S: string; CodePage: Word): WideString;
var
InputLength, OutputLength: Integer;
begin
InputLength := Length(S);
OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
SetLength(Result, OutputLength);
MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;
SwiftHorse
2008-03-23
继续补充:
A、用IDHTTP取出来源文件显示如下:
<title>惗拞宲丂傆傞偝偲堦斣両</title>
B、用WebBrowser取出来源文件显示如下:
<TITLE>生中継 ふるさと一番!</TITLE>
WebBrowser取出来的是我想要的,问题就是通过IDHTTP怎样才能得到WebBrowser这样的效果?
A、用IDHTTP取出来源文件显示如下:
<title>惗拞宲丂傆傞偝偲堦斣両</title>
B、用WebBrowser取出来源文件显示如下:
<TITLE>生中継 ふるさと一番!</TITLE>
WebBrowser取出来的是我想要的,问题就是通过IDHTTP怎样才能得到WebBrowser这样的效果?
SwiftHorse
2008-03-23
补充:我用IE找开目标网页,查看源文件,显示也是简体乱码,但用firefox找开目标网页,查看源文件显示正常。我想firefox浏览器既然可以做到,那总是应该有方法的,请交流指导!
zbird
2008-03-21
WebBrowser取出来的好像是unicode的。
IDHTTP你得自己进行编码转换。
IDHTTP你得自己进行编码转换。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 87371 次
- 性别:

- 来自: 广东

- 详细资料
搜索本博客
我的相册
期盼家人
共 5 张
共 5 张
最近加入圈子
最新评论
-
人间如风来烟去,几片光彩 ...
世间有百味,唯有淡淡的水可以一辈子品尝都不会厌倦。 平淡就是福,能够珍惜不容易。
-- by fshhui -
我生来忧伤
过去的你已不是今天的你 今天的你也不是明天的你 明天的你更不可预见 所以过去的 ...
-- by fshhui -
透过镜头抒写“程序人生” ...
人到中年,身上的担子越来越重,想的东西自然就多了。有同感。 可是能够放下的能有几 ...
-- by fshhui -
VBA简单实现两个Excel文 ...
你好。 请你尊重别人,不要随便透露别人的贷款信息!也许你是无心的,但已经给我造成 ...
-- by baizi17 -
出差一个月
去哪里学习?
-- by longaiqun001






评论排行榜