关于FTP的中文问题

最近用apache的commons net进行ftp操作时,对文件名包含中文的文件总是操作失败。ftp server用的是Serv-U,看了一下日志
[img]/upload/attachment/103150/21bfca98-aaa0-3297-974f-aa90487914bc.jpg[/img]
发现有乱码。上网查了一下,要转码为ISO-8859-1。于是对文件名进行转码
new String(f.getName().getBytes("GBK"), "ISO-8859-1")
但转码之后还是不行,日志里还是有乱码。后来又瞎试了一通,结果依然不行。于是不得以开始怀疑是Serv-U的问题,上网查了一下,原来默认安装的Serv-U对所有已收发的路径和文件名使用UTF-8编码,所以就会产生乱码的问题。可以修改Serv-U的设置来解决。
[img]/upload/attachment/103173/7b752714-2146-37c6-81eb-c13527975052.jpg[/img]
[img]/upload/attachment/103175/5a808d5c-7101-30b0-95d1-8df402aa3514.jpg[/img]
[img]/upload/attachment/103179/697d1f0c-1c58-3d6a-8182-47356b96480a.jpg[/img]
将“对所有已收发的路径和文件名使用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的日志
[img]/upload/attachment/103181/13ce608e-1bfe-3701-9193-ed52de8c6631.jpg[/img]
原来它向服务器发送了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,都可以解决问题了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值