关于网友提出的“ 用TIdHTTP控件抓取这个网址的数据时,出现乱码”问题疑问,本网通过在网上对“ 用TIdHTTP控件抓取这个网址的数据时,出现乱码”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 用TIdHTTP控件抓取这个网址的数据时,出现乱码
描述: 为什么我用TIdHTTP控件抓取这个网址的数据时,出现乱码?而其他的一般的网址就可以?怎么改?先谢了!
该地址如下:
http://bill.finance.sina.com.cn/bill/trade_item.php?stock_code=sh580013&pages=0&time=1218809515'
程序如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
StdCtrls, ExtCtrls, WebAdapt, WebComp,WinINet, ComCtrls, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
url:string;
IdHTTP:TIdHTTP;
stream:TMemoryStream;
begin
url:='http://bill.finance.sina.com.cn/bill/trade_item.php?stock_code=sh580013&pages=0&time=1218809515';
IdHTTP:=TIdHTTP.Create(nil);
stream:=TMemoryStream.Create;
try
IdHTTP.get(url,stream);
stream.SaveToFile('c:\1.txt');
finally
stream.Free;
IdHTTP.Free;
end;
end;
end.
解决方案1: 呵呵,终于做出来了,有一定收获,
在算法上还是花了不少时间,
以前解gzip内容,现在是deflate,少了文件头内容,所以
用以前思路老是碰到"data error"问题。
用的是zLib控件:
(http://www.2ccc.com/article.asp?articleid=4269)
下面是可以运行的代码片断:
uses ZLibEx;
procedure TForm1.Button3Click(Sender: TObject);
var
url: string;
IdHTTP: TIdHTTP;
stream, out_stream: TMemoryStream;
begin
url := 'http://bill.finance.sina.com.cn/bill/trade_item.php?stock_code=sh580013&pages=0&time=1218809515';
IdHTTP := TIdHTTP.Create(nil);
stream := TMemoryStream.Create;
out_stream := TMemoryStream.Create;
try
IdHTTP.get(url, stream);
stream.Position:=0;
ZLibEx.ZDecompressStream2(stream, out_stream, -15);
stream.SaveToFile('c:\1.txt');
out_stream.SaveToFile('c:\2.txt'); //这个就是我们要的html内容
finally
stream.Free;
out_stream.Free;
IdHTTP.Free;
end;
end;
以上介绍了“ 用TIdHTTP控件抓取这个网址的数据时,出现乱码”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3667775.html