Apache Ftp Server 中文目录,中文文件名,IE访问乱码解决

在XP系统下,使用IE访问Apache Ftp Server的中文目录和文件名时会出现乱码问题。通过修改Apache Ftp Server源码,将UTF-8编码改为GBK编码,可以解决IE访问时的乱码及复制错误。具体修改涉及OPTS_UTF8.java、FtpServerProtocolCodecFactory.java、IODataConnection.java和FtpResponseEncoder.java四个文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Ftp Server,目前是1.0.4,非常好的纯Java Ftp服务器,既可以直接提供FTP服务,有可以嵌入到程序里。

 

如果Ftp服务器提供的内容,有中文目录,文件名,XP下IE访问会出现一些错误。

如果IE的选项->高级里 为Ftp站点启用文件夹视图选项

没有选中,这时显示的是Html页面,但中文显示是乱码,强行指定编码为Utf8,则显示正常,但无法下载;

该选项选中,这时是文件夹方式显示Ftp服务器内容,选中文件夹后右键复制到文件夹,会复制出错,但用复制,然后粘贴到指定位置的方式可以正常复制。

使用windows带的ftp.exe访问站点,遇到中文也会出现错误。

但如果用流行的ftp客户端,比如FlashFXP就一切正常。

 

这说明XP 下IE的Ftp支持有bug。

但用户一般不用Ftp客户端,为了迁就IE,只有对ApacheFtpServer修改,通过查资料,XP下用的编码是GBK,只要把Apache FtpServer代码中处理编码的地方由国际标准UTF8编码改为迁就Xp下IE的GBK编码即可完成。

 

 

具体修改 

 


org.apache.ftpserver.command.impl包里OPTS_UTF8.java
将 
session.write(LocalizedFtpReply.translate(session, request, context, FtpReply.REPLY_200_COMMAND_OKAY, "OPTS.UTF8", null));

改为
session.write(LocalizedFtpReply.translate(session, request, context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "OPTS.UTF8", null)); 

 

 

org.apache.ftpserver.listener.nio包里FtpServerProtocolCodecFactory.java

new TextLineDecoder(Charset.forName("UTF-8"));
改为:
new TextLineDecoder(Charset.forName("GBK"));  

 

 

org.apache.ftpserver.impl包里IODataConnection.java
将  
writer = new OutputStreamWriter(out, "UTF-8"); 
改为:
writer = new OutputStreamWriter(out, "GBK"); 

org.apache.ftpserver.listener.nio包里FtpResponseEncoder.java

Charset.forName("UTF-8").newEncoder(); 
改为:
Charset.forName("GBK").newEncoder(); 

 

 

重编译后,手动替换class就可以,

如果用mvn package,test过不了,只有将出错的test文件DecoderTest和I18NTest删除,再package。

 

然后IE两种方式都可以正确的访问FTP服务器中的中文资源了。

 

 

参考了下面资料:

http://v64500.javaeye.com/blog/259685

http://topic.youkuaiyun.com/t/20040422/18/2997663.html

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值