问题:

以前惯用Serv-U破解版作Ftp server,客户端使用TotalCommand或者其它的Ftp Client,没有发现什么问题。

最近因为考虑到版权,而且也懒得经常跟踪最新版本的Crack,索性就更换了Ftp Server。

FtpZilla提供了一体的Client和Server解决方案,故而就采用了它。

Google了下相关资料,很快搞定了。基本用法与Serv-U相似,不再赘述。

TotalCommand客户端,中文显示正常:

FTP乱码_第1张图片

LeapFTP、8UFTP客户端,中文显示不正常:

FTP乱码_第2张图片 


原因:

服务器端字符集和客户端字符集不匹配。

服务器端一般采用Linux系统,而Linux系统默认采用通行全球的UTF8字符集,而向来喜欢自搞一套的天朝强力推行国家标准GBK,规定在天朝范围内销售的OS必须将GBK作为默认的字符集,作为客户端主流OS的Windows中文版被迫将GBK作为默认字符集,而其它非英语语种的Windows一般将UTF8视作默认字符集。

客户端将服务器端提供的UTF8字符集当作GBK解释自然就出现乱码了。

FTP服务器端 UTF UTF GBK GBK
FTP客户端 UTF GBK UTF GBK
乱码

上表是一般规律。理论上,如果客户端能够自动识别服务器端代码页而且正确无误的化,自然不会出现乱码的现象。如TotalCommand客户端设置:

FTP乱码_第3张图片

FTP是基于Telnet(RFC 854)发展而来的,最早的RFC 959根本没有提及国际化,只支持7位的ASCII,直到1999年才有RFC 2640提及此问题,之后,逐渐开始有服务器端支持UTF(最早是2002年),而客户端的UTF支持则更晚。

时至今日,相当多的客户端不能正确识别服务器端传回的UTF字符集,出现乱码也就是必然了。

本例中,FTPZilla server基于UTF字符集,而LeapFTP、8UFTP客户端将服务器端传回的UTF8字符集当作Windows默认的GBK解释自然就出现乱码了


解决方法:

对乱码的客户端,直接向服务器端发送原始的FTP命令:

opts utf8 off

关闭服务器端的UTF翻译,将Windows的GBK编码原样传回至客户端,即可解决此问题。

p_w_picpath

 FTP乱码_第4张图片

命令执行效果如下:

p_w_picpath

再在客户端刷新显示:

FTP乱码_第5张图片

最终效果:

FTP乱码_第6张图片

在执行“opts utf8 off”命令前应该执行“feat”命令测试下服务器端是否支持UTF8扩展。

FTP乱码_第7张图片


参考资料

1. 讓 FileZilla Server 可以允許非 UTF8 連線, 直到收到 OPTS UTF8 ON 指令

2. FTP RFC文档及命令 http://www.g6ftpserver.com/manuals/en/documents.html

3. FileZilla 字符集 http://wiki.filezilla-project.org/Character_Set

4. vsftpd的文件名编码 http://blog.jessinio.info/2010/03/vsftpd_29.html

5. FTP协议 http://www.hudong.com/wiki/FTP%E5%8D%8F%E8%AE%AE

6. Cuteftp不支持UTF-8,可以用自定义命令解决 http://www.cndev.org/forum/msg?pid=569583

“cuteftp不支持UTF-8,可以用自定义命令解决。

Tools---Cutsom Commands---Edit Custom Commands---Add
增加两个命令 opts utf8 on 和 opts utf8 off,然后View---Toolbars---Custom Command Bar
每次登陆之后手工OFF一次再刷新就可以取消UTF-8了。”