在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);就可以了;
与大家分享一下。