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

在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);就可以了;

与大家分享一下。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值