C++Builder下如何解决IdFTP控件中文名乱码问题

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。)


一、获取文件列表
void __fastcall TForm1::Button1Click(TObject *Sender)
{
__int64 fileSize;
AnsiString fileName;


IdFTP1->Host="22.36.26.57";
IdFTP1->Port=21;
IdFTP1->Username="csps";
IdFTP1->Password="csps";
try
{
IdFTP1->Connect();
IdFTP1->IOHandler->DefStringEncoding=IndyTextEncoding(TEncoding::Default);//此处选择编码格式,三选一。
//IdFTP1->IOHandler->DefStringEncoding=IndyTextEncoding(TEncoding::ANSI);
//IdFTP1->IOHandler->DefStringEncoding=IndyTextEncoding(TEncoding::UTF8);

}
catch(...)
{
ShowMessage("FTP连接服务器失败!");
return;
}
//
try
{
IdFTP1->List();
}
catch(...)
{
ShowMessage("FTP列举文件失败!");
return;
}
//
for(int i=0;i<IdFTP1->DirectoryListing->Count;i++)
{
fileName=IdFTP1->DirectoryListing->Items[i]->FileName;
fileSize=IdFTP1->DirectoryListing->Items[i]->Size;
Memo1->Lines->Add("文件名称:"+fileName+"  文件大小:"+String(fileSize));
}


}


二、测试结果




经测试:
1、Serv-U6.3旧版本下不能设定编码格式,在windows server2003 64位下测试发现无论用什么编码,中文都乱码;但是SERV-U新版本在全局变量那里有一个设置支持UTF8编码的地方,此时用UTF8编码就不会乱码了。
2、fileZilla这个FTP服务器挺强悍,在任何编码下都能正常显示中文名。



三、补充说明

1、对于无论设置什么编码都不能显示中文文件名的特殊情况,可以通过如下语句解决,但是只能得到文件名,得不到文件大小。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
__int64 fileSize;
AnsiString fileName;
TStringList *fileList=new TStringList;


IdFTP1->Host="22.36.26.57";
IdFTP1->Port=21;
IdFTP1->Username="csps";
IdFTP1->Password="csps";
try
{
IdFTP1->Connect();

       //第一个必须条件
IdFTP1->IOHandler->DefStringEncoding=IndyTextEncoding(TEncoding::ANSI);//此处必须设置为ANSI
}
catch(...)
{
ShowMessage("FTP连接服务器失败!");
return;
}
//
try
{

//第二个必须条件
IdFTP1->List(fileList,"",false);/
/第一个参数是变量,第二个参数是通配符,比如‘*,?’等,第三个参数是否显示详细信息,比如文件大小,必须为false才能显示文件名.
}
catch(...)
{
ShowMessage("FTP列举文件失败!");
return;
}
//
for(int i=0;i<IdFTP1->DirectoryListing->Count;i++)
{
fileName=IdFTP1->DirectoryListing->Items[i]->FileName;
fileSize=IdFTP1->DirectoryListing->Items[i]->Size;
Memo1->Lines->Add("文件名称:"+fileName+"  文件大小:"+String(fileSize));
}


}


2、增加头文件#include "IdAllFTPListParsers.hpp";/*解决弹屏报错:No ftp list parsers have been registered*/

3、另外,IdFTPServer控件并没有设置编码的这一属性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值