ie无法上传文件名为奇数个汉字的文件
在UTF-8编码下,每个汉字被分配为3个字节存储。当我们通过GET方式请求奇数个汉字,或者直接读取存储在Cookies中的奇数个汉字时,IE的HTML解析引擎“自作主张”的将汉字(亦称“全角字符”)的高位截掉,最后作为两个字节显示出来。很显然,按照这个思路,这奇数个字的第三个字信息是不完整的,也就出现了上面第三个字乱码的情况。
只要是偶数个字则均可正常显示,只要是奇数个字则最后一个字符必定乱码。
修改字符集
改为:
注意:在这里,IE会忽略了202回复并继续以utf8模式处理服务器发送的ANSI数据。
解决办法是把回复代码改为502或504。
[url]http://topic.youkuaiyun.com/t/20040422/18/2997663.html[/url]
改为:
改为:
大功告成。
另外如果FtpReply有中文会出现乱码
改为:
在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。
[url]http://topic.youkuaiyun.com/t/20040422/18/2997663.html[/url]
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();