`
v64500
  • 浏览: 22278 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

ie apache ftpserver 奇数个汉字问题

    博客分类:
  • java
阅读更多
ie无法上传文件名为奇数个汉字的文件

在UTF-8编码下,每个汉字被分配为3个字节存储。当我们通过GET方式请求奇数个汉字,或者直接读取存储在Cookies中的奇数个汉字时,IE的HTML解析引擎“自作主张”的将汉字(亦称“全角字符”)的高位截掉,最后作为两个字节显示出来。很显然,按照这个思路,这奇数个字的第三个字信息是不完整的,也就出现了上面第三个字乱码的情况。
只要是偶数个字则均可正常显示,只要是奇数个字则最后一个字符必定乱码。

修改字符集
org.apache.ftpserver.command.impl.OPTS_UTF8

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));

注意:在这里,IE会忽略了202回复并继续以utf8模式处理服务器发送的ANSI数据。 
解决办法是把回复代码改为502或504。
http://topic.csdn.net/t/20040422/18/2997663.html


org.apache.ftpserver.listener.nio.FtpServerProtocolCodecFactory
private ProtocolDecoder decoder = new TextLineDecoder(Charset
            .forName("UTF-8"));

改为:
private ProtocolDecoder decoder = new TextLineDecoder(Charset
            .forName("GBK"));



org.apache.ftpserver.IODataConnection
writer = new OutputStreamWriter(out, "UTF-8");

改为:
writer = new OutputStreamWriter(out, "GBK");


大功告成。


另外如果FtpReply有中文会出现乱码
org.apache.ftpserver.listener.nio.FtpResponseEncoder
private static final CharsetEncoder ENCODER = Charset.forName("UTF-8")
            .newEncoder();

改为:
private static final CharsetEncoder ENCODER = Charset.forName("GBK")
            .newEncoder();
分享到:
评论
1 楼 Julian 2009-06-15  
建议把这个问题提交apache,下个版最好能通过配置文件修改编码设置

相关推荐

Global site tag (gtag.js) - Google Analytics