DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 34
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/3 15:30:17
标题:
delphi xe2 idftp使用乱码问题 浏览:6624
加入我的收藏
楼主: 原来系统是delphi2007写的 利用idftp来操作ftp,使用方便 都很ok了
现在ide升级到delphi xe2 好处是delphi终于支持unicode了 但是随之带来的问题是 idftp在获取目录名称时 中文显示乱码
网络上也找了一些资料 设置了下 都不行 还敢请教下大家 谢谢。
简易代码如下:
var
  IdFTP: TIdFTP;
begin
  IdFTP := TIdFTP.Create(Self);
  try
    IdFTP.Host := '221.234.43.173';
    IdFTP.Port := 6666;
    IdFTP.Username := 'egmis';
    IdFTP.Password := 'egmis';

    IdFTP.Connect;          // Default, UTF7, UTF8, Unicode, BigEndianUnicode
    IdFTP.IOHandler.DefStringEncoding := TEncoding.ANSI;
//    IdFTP.IOHandler.DefStringEncoding := TIdTextEncoding.ANSI;
    IdFTP.Passive := True;
    IdFTP.ChangeDir('\Test');
    IdFTP.TransferType := ftASCII;
    IdFTP.List;
    ShowMessage(AnsiString(IdFTP.ListResult.Text));
    ShowMessage(UTF8ToString(IdFTP.ListResult.Text));
    ShowMessage(IdFTP.ListResult.Text);
  finally
    IdFTP.Free;
  end;
end;
----------------------------------------------
-
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2012/9/3 19:55:55
1楼:  IdFTP.IOHandler.DefStringEncoding := TEncoding.ANSI;
改为取系统默认编码。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/3 22:29:31
2楼: 每个编码都测试过了   依然还是乱码。。
----------------------------------------------
-
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2012/9/3 23:22:03
3楼: 改为IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;试试看;
----------------------------------------------
按此在新窗口浏览图片
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 6:39:03
4楼: TEncoding下所有编码都试过了 都不行 依然乱码
恼火的是 原来d2007都正常 升级到xe2就乱码了  应该是xe2支持unicode导致。。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 10:18:11
5楼: 继续求解中ing。。。。
----------------------------------------------
-
作者:
男 xingzx (xingzx) ★☆☆☆☆ -
普通会员
2012/9/4 10:48:44
6楼: xuchuantao (暗黑天使)
的办法是正确的。

在idFTP连接后,

IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;

就可以了。
我也遇到类似的问题,自己在网上搜索解决的,就是上面的方法。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 11:06:10
7楼: var
  IdFTP: TIdFTP;
begin
  IdFTP := TIdFTP.Create(Self);
  try
    IdFTP.Host := '221.234.43.173';
    IdFTP.Port := 6666;
    IdFTP.Username := 'egmis';
    IdFTP.Password := 'egmis';

    IdFTP.Connect;          // Default, UTF7, UTF8, Unicode, BigEndianUnicode
    IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;
    IdFTP.Passive := True;
    IdFTP.ChangeDir('\Test');
    IdFTP.TransferType := ftASCII;
    IdFTP.List;
    ShowMessage(AnsiString(IdFTP.ListResult.Text));
    ShowMessage(UTF8ToString(IdFTP.ListResult.Text));
    ShowMessage(IdFTP.ListResult.Text);
  finally
    IdFTP.Free;
  end;
end;
能否帮我看下 我代码就是这样 可是它showmessage出来的 就是乱码 这里showmessge我用了3个方法 转换 都是乱码 郁闷。。。 是不是哪里有问题?
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 11:06:40
8楼: ftp服务器软件是用server-u 会不会跟服务器那边有关系???
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 14:13:47
9楼: 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 14:58:54
10楼: 求助ing。。。。
----------------------------------------------
-
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2012/9/4 18:48:47
11楼: IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;
IdFTP.Connect;
不行把控件删掉再重新添加试试看。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 xuchuantao (暗黑天使) ★☆☆☆☆ -
普通会员
2012/9/4 19:03:35
12楼: ShowMessage(IdFTP.ListResult.Text);
----------------------------------------------
按此在新窗口浏览图片
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/4 21:30:47
13楼: 控件就是动态创建的啊
没有问题。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/5 8:27:14
14楼: 自己顶下 继续求教中ing
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/5 10:50:34
15楼: 再顶下。。。。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/5 17:20:12
16楼: 按此在新窗口浏览图片 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/5 22:41:07
17楼: 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/6 9:42:46
18楼: 看来这问题 没人解了  嗨。。。郁闷呐。。。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/7 15:21:36
19楼: 这帖子 彻底失望 看来没戏了。
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/9 9:10:22
20楼: 真没戏 了
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/9/13 10:59:54
21楼: 按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 andreabocelli (Andrea Bocelli) ★☆☆☆☆ -
普通会员
2012/10/4 7:01:42
22楼: 嗨。。最终还是自己搞定   ftp软件换了一个 就ok了

原来用serveru 换delphi ex2 总是乱码  无意中 换个ftp软件 FileZilla_Server 乱码问题解决 同时一个外网转发功能也解决   还是开源的好啊。。。。
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2012/10/25 6:33:14
23楼: Indy 就是有问题, ics 则没有此问题,可ics 比较怪
----------------------------------------------
-
作者:
男 pjp215 (pjp215) ▲▲▲▲▲ -
普通会员
2013/6/25 16:39:29
24楼: 我也遇到了编码的问题,换成这个默认的编码就没有问题了。IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;。我用的xe,试了没有问题。get时AnsiToUtf8函数下,IdFTP1.Get(DocName,AnsiToUtf8(Filepath),True,True);
----------------------------------------------
aaa
作者:
男 etjon (etjon) ★☆☆☆☆ -
普通会员
2013/6/25 21:11:11
25楼: 這個問題我研究了3天,原因是不的 ftp Server 預設的可能不同,像 IIS 7.0 預設的 ftp 和 IIS 7.5 預設的 FTP 字元編碼中有個選項,叫 UTF8 什麼的設定,傳回的結果即不同,因寫的客戶端可能會連結不同的 ftp Server ,所以不可能寫死,我有試過如果用預設的編碼還是會不正確,正確的解決方式如下:
連線成功後,透過 FEAT 詢問 ftp server 是否支援 UTF8,再設定編碼的類型,我改成這樣後不管  ftp server 如何設有沒有支援 UTF8,都很正常,你可以試試

FIdFtp->Connect();
    FtpConnect = FIdFtp->Connected();
    if(FtpConnect)
    {
      // 以下程式碼很重要,若設定錯誤可能無法取得中文的檔案名稱
      FFtpServerAllowUTF8 = false;
      FIdFtp->IOHandler->DefStringEncoding = TEncoding::Default;
      FIdFtp->Quote(L"FEAT");
      for( int i=0;i<FIdFtp->LastCmdResult->Text->Count;i++)
      {
        if( FIdFtp->LastCmdResult->Text->Strings[i].CompareIC(L"UTF8")==0 )
        {
          FFtpServerAllowUTF8 = true;
          FIdFtp->IOHandler->DefStringEncoding = TEncoding::UTF8;
          break;
        }
      }
    }
----------------------------------------------
-
作者:
男 etjon (etjon) ★☆☆☆☆ -
普通会员
2014/5/7 11:51:37
26楼: 至從XE2 升級至 XE6 後 25 樓我自己發的帖,發現無法運作,試了很久後發現要自己送命另才會正常,所以又修了一個版本.
void __fastcall TForm1::btn1Click(TObject *Sender)
{
   bool FFtpServerAllowUTF8 = false;
   IdFTP1->Connect();
   IdFTP1->IOHandler->DefStringEncoding = IndyTextEncoding_OSDefault();
   bool  FtpConnect = IdFTP1->Connected();
    if(FtpConnect)
    {
      FFtpServerAllowUTF8 = false;
      IdFTP1->Quote(L"FEAT");
      if( IdFTP1->IsExtSupported(L"UTF8") )
      {
        // trying non-standard UTF-8 extension first, many servers use this...
        // Cerberus and RaidenFTP return 220, but TitanFTP and Gene6 return 200 instead...
        if( IdFTP1->SendCmd(L"OPTS UTF8 ON")==200 || IdFTP1->SendCmd(L"OPTS UTF8 ON")==220 )
        {
          IdFTP1->IOHandler->DefStringEncoding = IndyTextEncoding(encUTF8);
          FFtpServerAllowUTF8 = true;
        } else
        {
           // trying draft-ietf-ftpext-utf-8-option-00.txt next...
           if( IdFTP1->SendCmd(L"OPTS UTF-8 NLST")==200 )
           {
            IdFTP1->IOHandler->DefStringEncoding = IndyTextEncoding(encUTF8);
            FFtpServerAllowUTF8 = true;
           }
        }
      }
    }

    size2 = IdFTP1->Size(L"新文字文件.txt"); // return 4 byte ,Ok


}
----------------------------------------------
-
作者:
男 etjon (etjon) ★☆☆☆☆ -
普通会员
2014/5/8 0:06:27
27楼: 以上有參考到這一篇文章 http://forums2.atozed.com/viewtopic.php?f=7&t=26561
----------------------------------------------
-
作者:
男 pigbaby (猪宝宝) ★☆☆☆☆ -
普通会员
2018/10/4 0:29:48
28楼: 超感謝 解決了我的大問題
謝謝 ^^
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS