|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2012/9/3 15:30:17 |
标题: |
delphi xe2 idftp使用乱码问题 |
浏览:6626 |
|
加入我的收藏 |
楼主: |
原来系统是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;
----------------------------------------------
- |
作者: |
|
2012/9/3 19:55:55 |
1楼: |
IdFTP.IOHandler.DefStringEncoding := TEncoding.ANSI; 改为取系统默认编码。
----------------------------------------------
|
作者: |
|
2012/9/3 22:29:31 |
2楼: |
每个编码都测试过了 依然还是乱码。。
----------------------------------------------
-
|
作者: |
|
2012/9/3 23:22:03 |
3楼: |
改为IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;试试看;
----------------------------------------------
|
作者: |
|
2012/9/4 6:39:03 |
4楼: |
TEncoding下所有编码都试过了 都不行 依然乱码 恼火的是 原来d2007都正常 升级到xe2就乱码了 应该是xe2支持unicode导致。。
----------------------------------------------
-
|
作者: |
|
2012/9/4 10:18:11 |
5楼: |
继续求解中ing。。。。
----------------------------------------------
-
|
作者: |
|
2012/9/4 10:48:44 |
6楼: |
xuchuantao (暗黑天使) 的办法是正确的。
在idFTP连接后, 加 IdFTP.IOHandler.DefStringEncoding := TEncoding.Default;
就可以了。 我也遇到类似的问题,自己在网上搜索解决的,就是上面的方法。
----------------------------------------------
-
|
作者: |
|
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个方法 转换 都是乱码 郁闷。。。 是不是哪里有问题?
----------------------------------------------
-
|
作者: |
|
2012/9/4 11:06:40 |
8楼: |
ftp服务器软件是用server-u 会不会跟服务器那边有关系???
----------------------------------------------
-
|
作者: |
|
2012/9/4 14:13:47 |
9楼: |
----------------------------------------------
-
|
作者: |
|
2012/9/4 14:58:54 |
10楼: |
----------------------------------------------
-
|
作者: |
|
2012/9/4 18:48:47 |
11楼: |
IdFTP.IOHandler.DefStringEncoding := TEncoding.Default; IdFTP.Connect; 不行把控件删掉再重新添加试试看。
----------------------------------------------
|
作者: |
|
2012/9/4 19:03:35 |
12楼: |
ShowMessage(IdFTP.ListResult.Text);
----------------------------------------------
|
作者: |
|
2012/9/4 21:30:47 |
13楼: |
控件就是动态创建的啊 没有问题。
----------------------------------------------
-
|
作者: |
|
2012/9/5 8:27:14 |
14楼: |
----------------------------------------------
-
|
作者: |
|
2012/9/5 10:50:34 |
15楼: |
再顶下。。。。
----------------------------------------------
-
|
作者: |
|
2012/9/5 17:20:12 |
16楼: |
----------------------------------------------
-
|
作者: |
|
2012/9/5 22:41:07 |
17楼: |
----------------------------------------------
-
|
作者: |
|
2012/9/6 9:42:46 |
18楼: |
看来这问题 没人解了 嗨。。。郁闷呐。。。
----------------------------------------------
-
|
作者: |
|
2012/9/7 15:21:36 |
19楼: |
这帖子 彻底失望 看来没戏了。
----------------------------------------------
-
|
作者: |
|
2012/9/9 9:10:22 |
20楼: |
真没戏 了
----------------------------------------------
-
|
作者: |
|
2012/9/13 10:59:54 |
21楼: |
----------------------------------------------
-
|
作者: |
|
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 比较怪
----------------------------------------------
-
|
作者: |
|
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
----------------------------------------------
-
|
作者: |
|
2018/10/4 0:29:48 |
28楼: |
超感謝 解決了我的大問題 謝謝 ^^
----------------------------------------------
-
|
|