`
szhnet
  • 浏览: 110031 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于FTP的中文问题

    博客分类:
  • java
阅读更多
    最近用apache的commons net进行ftp操作时,对文件名包含中文的文件总是操作失败。ftp server用的是Serv-U,看了一下日志

发现有乱码。上网查了一下,要转码为ISO-8859-1。于是对文件名进行转码
new String(f.getName().getBytes("GBK"), "ISO-8859-1")
但转码之后还是不行,日志里还是有乱码。后来又瞎试了一通,结果依然不行。于是不得以开始怀疑是Serv-U的问题,上网查了一下,原来默认安装的Serv-U对所有已收发的路径和文件名使用UTF-8编码,所以就会产生乱码的问题。可以修改Serv-U的设置来解决。



将“对所有已收发的路径和文件名使用UTF-8编码”前面的勾去掉就好了。如果不能修改ftp服务器的话怎么办呢?实际上由于Serv-U默认开启了UTF-8编码那么只要这样进行转码就可以了
new String(f.getName().getBytes("UTF-8"), "ISO-8859-1")

    但是万一ftp服务器没有开启UTF-8呢?有些ftp服务器可能根本就不支持utf-8,如果是这样怎么办呢?可以看一下FlashFXP是怎么办到的,查看FlashFXP的日志

原来它向服务器发送了OPTS UTF8 ON命令,来开启服务器对UTF-8的支持。所以我们也可以仿照FlashFXP那样向服务器发送该命令。
String charsetName = "GBK";
if (FTPReply.isPositiveCompletion(ftpC.sendCommand("OPTS UTF8", "ON"))) // 发送OPTS UTF8指令,尝试支持utf-8
	charsetName = "utf-8";
如果支持就用UTF-8,不支持就默认GBK。然后转码的时候
new String(f.getName().getBytes(charsetName), "ISO-8859-1")

    这样就不管ftp服务器是否支持utf8,都可以解决问题了。
  • 大小: 4.4 KB
  • 大小: 144.5 KB
  • 大小: 76.2 KB
  • 大小: 28.5 KB
  • 大小: 28.5 KB
  • 大小: 7 KB
1
1
分享到:
评论
3 楼 panyong_8 2013-01-06  
  感谢
2 楼 zzbatluzhou 2011-04-29  
我转走了
1 楼 zzbatluzhou 2011-04-29  
非常感谢!!

相关推荐

Global site tag (gtag.js) - Google Analytics