分类: Java
2009-04-09 15:31:52
Response.setHeader(”Content-Disposition”, “attachment; filename=” + fileName+”.xls”);
如果file.Name为中文则乱码。解决办法是
方法1:
response.setHeader(”Content-Disposition”, “attachment; filename=” + java.net.URLEncoder.encode(fileName, “UTF-8″));
下载的程序里有了上面一句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。但是文字只要超过17个字,就不能下载了。
一. 通过原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。这是IE的bug,参见微软的知识库文章
KB816868 。原因可能是IE在处理 Response Header
的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。而且不跟后缀也
不对.
方法2:
response.setHeader( “Content-Disposition”, “attachment;filename=” + new String( fileName.getBytes(”gb2312″), “ISO8859-1″ ) );
在确保附件文件名都是简
体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。如果台湾同胞用,把gb2312改成big5就行。但现在的系统通常都加入了
国际化的支持,普遍使用UTF-8。如果文件名中又有简体中文字,又有繁体中文,还有日文。那么乱码便产生了。另外,在上Firefox
(v1.0-en)下载也是乱码。
chinaunix网友2009-04-12 13:21:55
要把一个字符串作为URL参数传递给另一个页面,必须要保证传递的字符串是正确的,能够被目标页面正确识别。 但由于URL传递时会造成某些冲突。比如,你要传递的字符串也是一个带有参数的URL,如http://www.oyksoft.com/a.asp?b=1&c=2&d=3,我要把这个URL字符串传递给http://www.oyksoft.com/e.asp,参数为url。如果不作任何处理,那么就是这样: http://www.oyksoft.com/e.asp?url=http://www.oyksoft.com/a.asp?b=1&c=2&d=3 这样是很混乱的,它肯定会把c和d认为是传参,而url参数为http://www.oyksoft.com/a.asp?b=1 这样理解当然是错误的了。所以我们必须对原字符串进行重新编码。 在ASP和javascript里面,有escape和unescape可以解决问题。 引用 JavaScript中escape函数是对 String 对象编码以便它们能在所有计算机上可读,使用方法: escape(charString)