以前惯用Serv-U破解版作Ftp server,客户端使用TotalCommand或者其它的Ftp Client,没有发现什么问题。
最近因为考虑到版权,而且也懒得经常跟踪最新版本的Crack,索性就更换了Ftp Server。
FtpZilla提供了一体的Client和Server解决方案,故而就采用了它。
Google了下相关资料,很快搞定了。基本用法与Serv-U相似,不再赘述。
TotalCommand客户端,中文显示正常:
LeapFTP、8UFTP客户端,中文显示不正常:
服务器端字符集和客户端字符集不匹配。
服务器端一般采用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是基于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编码原样传回至客户端,即可解决此问题。
命令执行效果如下:
再在客户端刷新显示:
最终效果:
在执行“opts utf8 off”命令前应该执行“feat”命令测试下服务器端是否支持UTF8扩展。
参考资料
1. � FileZilla Server 可以允�S非 UTF8 �B�, 直到收到 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了。”