DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 5
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 badwood (badwood) ★☆☆☆☆ -
盒子活跃会员
2016/9/5 14:48:34
标题:
用IDFTP上传中文文件名的问题 浏览:1874
加入我的收藏
楼主: 环境XE6。
用IDFTP.put上传中文名文件。
因为FTP不支持UTF8,上传的文件名显示为问号。
将文件名转码GBK,但结果仍然是问号
请教该怎么解决。
----------------------------------------------
-
作者:
男 yuzhenguo0 (金远见) ★☆☆☆☆ -
普通会员
2016/9/5 15:13:43
1楼: 不支持中文?
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
男 ying32 (唯有此生) ▲▲▲▲▲ -
普通会员
2016/9/5 16:57:23
2楼: 将文件名进行urlencode看看吧
----------------------------------------------
一个热爱delphi的人,Golang GUI库。 --我的博客--
作者:
男 tianpanhaha (tianpanhaha) ▲▲▲▲△ -
普通会员
2016/9/5 17:53:03
3楼: idftp有big
----------------------------------------------
 QQ群:325010556 欢迎加入。
作者:
男 badwood (badwood) ★☆☆☆☆ -
盒子活跃会员
2016/9/5 17:57:47
4楼: 因为使用的FTP不支持UTF8,所以直接上传后显示的是问号。

但我将文件名转GBK码后发布仍然是问号,我后来查了下,发现idftp.put的函数定义如下:
    procedure Put(const ASource: TStream; const ADestFile: string;
      const AAppend: Boolean = False; const AStartPos: TIdStreamSize = -1); overload;
    procedure Put(const ASourceFile: string; const ADestFile: string = '';
      const AAppend: Boolean = False; const AStartPos: TIdStreamSize = -1); overload;

文件名参数  ADestFile 是string,unicode字符串,所以在前面把文件名转为GBK也没用。

我又在网上查了下,提到一个方法是在连接后,设置 idftp1.iohandler.defstringencoding,
我轮流设置为IndyTextEncoding_Default、  IndyTextEncoding_8Bit、   IndyTextEncoding_ASCII、 IndyTextEncoding_UTF16BE、 IndyTextEncoding_UTF16LE、 IndyTextEncoding_UTF7、IndyTextEncoding_UTF8,都不行。
----------------------------------------------
-
作者:
男 badwood (badwood) ★☆☆☆☆ -
盒子活跃会员
2016/9/5 17:58:50
5楼: FTP是支持GBK的,只是我用以上方法想转为GBK上传不成功。
----------------------------------------------
-
作者:
男 badwood (badwood) ★☆☆☆☆ -
盒子活跃会员
2016/9/6 8:41:32
6楼: 仔细阅读了INDY的源码,再次尝试,解决了。

idftp1.iohandler.defstringencoding赋值IndyTextEncoding_OSDefault后在不支持UTF8的FTP下上传中文正常。

前面测试各值的时候,不知道为什么偏偏漏掉了这一个唯一有效的……
----------------------------------------------
-
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2016/9/6 19:00:26
7楼: function IdFTPEnabledUTF8(IdFTP: TIdFTP): Boolean;
begin
  Result := False;
  if Assigned(IdFTP) then
  begin
    if IdFTP.Connected then
    begin
      IdFTP.Quote('FEAT');
      if IdFTP.IsExtSupported('UTF8') then
      begin
        case IdFTP.SendCmd('OPTS UTF8 ON') of
          200, 220:
          begin
          IdFTP.DefStringEncoding := IndyTextEncoding_UTF8;
          Result := True;
          end;
        else
          begin
          if IdFTP.SendCmd('OPTS UTF-8 NLST') = 200 then
          begin
          IdFTP.DefStringEncoding := IndyTextEncoding_UTF8;
          Result := True;
          end;
          end;
        end;
      end;
    end;
  end;
end;
----------------------------------------------
按此在新窗口浏览图片
作者:
男 badwood (badwood) ★☆☆☆☆ -
盒子活跃会员
2016/9/7 12:25:04
8楼: 谢谢xuchuantao (暗黑天使)分享
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行58.59375毫秒 RSS