关于下载中文文件的问题,网上有很多咨询和解答。 我原来处理下载的代码如下:
.("-", "; = " + ..(, "UTF-8"));
下载的程序中加上这句话,无论是简体中文还是日文,在IE6的下载提示框中都会正确显示文件名。 不过确实,当时文件名很长的中文文件名并没有经过仔细的测试。 现在经过仔细测试,发现只要文字超过17个字符,就无法下载。 经过大量的测试和反复的测试,我终于对这个问题有了系统的认识,罗列如下:
1.通过我原来的方法,即先使用编码,当汉字超过17个时,IE6无法下载文件。 这是 IE 中的一个错误,请参阅 的知识库文章。 原因可能是IE在处理时,pair的长度被限制在150字节左右。 而一个汉字编码成UTF-8是9个字节,那么17个字符就是153个字节,所以会报错。 微软已经提供了一个补丁,可以从这里下载。 该补丁需要先安装ie6 sp1。 因为我平时经常打补丁,所以我的IE6版本号是6.0.2800.1106。 所以我可能已经修补了它,以便它可以下载并且仍然会截断文件名。 微软让我们等待下一个 IE 包的发布。 今天我也在网上看到了好消息。 迫于压力,IE7可能会在年中发布。 另外,不支持这种方式,编码后的%xx%xx会直接显示为文件名。
2.我尝试使用.()方法对文件名进行编码,即以=??B??=的形式进行编码,并从中找到对应的标准支持。 不幸的是,IE6不支持这个标准。 我尝试了一下,是支持的。
3、根据网上很多人提供的解决方案:将文件名编码成-1似乎是一个有效的解决方案。 代码如下:
.( "-", ";= " + new ( .(""), "-1" ) );
在保证附件的文件名都是简体中文的情况下,那么这种方法确实是最有效的,不需要客户一一升级IE。 如果台湾同胞用的话,改成big5就可以了。 但目前的系统通常会增加国际化支持,常用UTF-8。 文件名中是否包含简体中文、繁体中文、日文。 然后就会产生乱码。 另外我电脑上下载的(v1.0-en)也是乱码。
考虑到折衷,我结合了方法1和3,代码片段如下:
= .(atta.(), "UTF-8");
如果 (.() > 150) {
=xxxx
= new (atta.().(), "-1");
}
.("-", "; = " + );
暂时不考虑,因为似乎对IE的企业用户市场影响不大。 影响客户账单的往往是进度,而不是兼容性。