您的位置:首页 > 理论基础 > 计算机网络

关于delphiXE中使用idhttp下载带有中文的文件解决方法。

2013-10-31 15:02 639 查看

在delphi7中使用idhttp下载中文文件没有问题,但是在delphiXE中下载带有中文的文件就有问题。这是因为在delphiXE中的string类型占用的字节不一样照成的,

解决方法,在request之前对url进行编码
idHTTP.URL.URLEncode(fileurl)

。例子如下:

这个是下载的函数;

procedure TForm3.Button2Click(Sender: TObject);

var

filestream:TFileStream;

tempurl:string;

begin

try

filestream:=TFileStream.Create('D:\六鱼.mp3',fmcreate);

tempurl :='http://aaa.wqx.cn/wqx/国学/六鱼.mp3';

IdHTTP1.Request.ContentRangeStart :=0;

IdHTTP1.HandleRedirects := True; //必须支持重定向否则可能出错

IdHTTP1.ReadTimeout := 30000; //超过这个时间则不再访问

IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon)';

IdHTTP1.Request.ContentRangeEnd :=GetFilesize(tempurl);

tempurl :=IdHTTP1.URL.URLEncode(tempurl) ;

IdHTTP1.Get(tempurl,filestream);

finally

filestream.Free;

end;

end;

---------------

获取文件大小的函数如下;

function TForm3.GetFilesize(fileurl: string):Int64;

var

idHTTP : TIdHTTP;

begin

idHTTP := TidHTTP.Create(nil);

try

idHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon)';

idHTTP.HandleRedirects := True; //必须支持重定向否则可能出错

idHTTP.ReadTimeout := 30000; //超过这个时间则不再访问

fileurl :=idHTTP.URL.URLEncode(fileurl);

idHTTP.Head(fileurl);

Result := idHTTP.Response.ContentLength;

finally

//idHTTP.Disconnect;

idHTTP.Free;

end;

end;

用 fileurl :=idHTTP.URL.URLEncode(fileurl);就可以了;

与大家分享一下。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐