做了个下载工具,可是下载中文名的就会报错,下载英文名的就可以,这是怎么回事  Mystream:=TmemoryStream.Create;aurl:='http://***/****/report/'+idhttp1.URL.PathEncode('APL提单.bmp');idhttp1.Get(aurl,Mystream);mystream.SaveToFile(gs_path+'\'+'APL提单.bmp');当文件名是中文的时候会报错 EIDHTTPProtocolException with message 'Http/1.1403 Forbindden' 当文件名是全英文的就可以了  怎么回事????

解决方案 »

  1.   

    错误的时候是指着 mystream.SaveToFile(gs_path+'\'+'APL提单.bmp');
      

  2.   

    应该是汉字编码问题
    可以用抓包工具对比下浏览器下载时的HTTP-GET包与Indy的GET包有什么不同。
    通过对那个中文进行编码(gbk->utf8或UCS2->utf8)应该可以的
    (浏览器能下载的,indy-http组件肯定办得到)另外,这里没提及Delphi版本,Delphi从某个版本开始支持unicode,字串处理方式略有不同,但原理是一样的。
      

  3.   

    Http/1.1403 Forbindden是说你无权查看,是权限问题呀。
      

  4.   

    gs_path+'\'+'APL提单.bmp'这个路径不正确吧,看看gs_path是不是已经带了斜线了;改成SaveToFile('d:\APL提单.bmp');试试
      

  5.   

    idhttp肯定是可以下载中文文件名文件的。我的项目跑了几年了,没问题的。
    检查楼上各位说的
      

  6.   

    同意的,
    我自己也写过一套小程序的,升级时,那个帮助文件就是中文,如"XXXX帮助系统.CHM"
    就很正常的
      

  7.   

    http://topic.csdn.net/u/20110913/13/59f92d11-1fb0-4b7e-9c4a-e93d8f19c689.html
    这个你可参考一下的