您的位置:首页 > 其它

文件下载时,IE与FireFox对文件名编码的不同处理! Content-Disposition

2010-09-09 19:31 459 查看
response.setHeader("Content-Disposition", "attachment; filename=123_文件.txt")



首先文件名是是以utf-8编码保存在数据库中,文件名暂定为1_中文文件123.txt,然后作如下处理来下载

response.setContentType("application/octet-stream;charset=UTF-8");

fileName=java.net.URLEncoder.encode(fileName, "UTF-8");

response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

此时在ie下面点击文件下载的时候能够正确显示中文名称1_中文文件123.txt%0A,但是文件名的结尾却出现%0A字符(个人猜测是结束符的utf-8编码);但是此时在firefox下面却显示1_%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6123.txt%0A

然后我又试了另一种方案

response.setContentType("application/octet-stream;charset=UTF-8");

fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");

response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

此时在ie下面下载的时候弹chu的文件名是乱码;而在firefox下面却正确显示1_中文文件123.txt。

我想要的是不管是ie还是firefox都正确显示1_中文文件123.txt,不知道大家有没有遇到过类似的问题,解决之道是什么?

也许判断浏览器类型来进行不同的处理会是一种解决方案,但是这是一种个人觉得迫不得已的解决方案。



String agent = request.getHeader("USER-AGENT");   
if (null != agent && -1 != agent.indexOf   
  
("MSIE"))   
{   
String codedfilename = URLEncoder.encode(cfrfilename, "UTF8");   
response.setContentType(   
  
"application/x-download");   
response.setHeader("Content-Disposition","attachment;filename=" + codedfilename);   
  
  
}   
else if (null != agent && -1 != agent.indexOf("Mozilla"))   
  
  
{       
String codedfilename = MimeUtility.encodeText(cfrfilename, "UTF8", "B");   
response.setContentType("application/x-download"  
  
);   
response.setHeader("Content-Disposition","attachment;filename=" + codedfilename);   
}   
  
  
else    
{   
response.setContentType("application/x-download");   
response.setHeader("Content-Disposition",   
  
"attachment;filename=" + cfrfilename);   
}







来源:http://www.javaeye.com/topic/50414
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐