导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2016/9/5 14:48:34
标题:
加入我的收藏
楼主:
环境XE6。 用IDFTP.put上传中文名文件。 因为FTP不支持UTF8,上传的文件名显示为问号。 将文件名转码GBK,但结果仍然是问号 请教该怎么解决。
----------------------------------------------
-
作者:
2016/9/5 15:13:43
1楼:
不支持中文?
----------------------------------------------
学DELPHI http://www.studydelphi.com
作者:
2016/9/5 16:57:23
2楼:
将文件名进行urlencode看看吧
----------------------------------------------
一个热爱delphi的人,Golang GUI库 。 --我的博客--
作者:
2016/9/5 17:53:03
3楼:
idftp有big
----------------------------------------------
QQ群:325010556 欢迎加入。
作者:
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,都不行。
----------------------------------------------
-
作者:
2016/9/5 17:58:50
5楼:
FTP是支持GBK的,只是我用以上方法想转为GBK上传不成功。
----------------------------------------------
-
作者:
2016/9/6 8:41:32
6楼:
仔细阅读了INDY的源码,再次尝试,解决了。 idftp1.iohandler.defstringencoding赋值IndyTextEncoding_OSDefault后在不支持UTF8的FTP下上传中文正常。 前面测试各值的时候,不知道为什么偏偏漏掉了这一个唯一有效的……
----------------------------------------------
-
作者:
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;
----------------------------------------------
作者:
2016/9/7 12:25:04
8楼:
谢谢xuchuantao (暗黑天使)分享
----------------------------------------------
-