Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name+".xls");中文显示乱码解决办法

wubai996 2009-01-14 10:08:41
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)下载也是乱码。
...全文
20979 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
a00pipi00 2012-05-16
  • 打赏
  • 举报
回复
呵呵,vs2010 里都没有 setHeader()方法啦....
jialiuer 2011-11-18
  • 打赏
  • 举报
回复
这个方法好像也有缺陷,可以试试,以下面的名子作为文件名下载

复件农网改造报表统计子系统培训教程农网培训教程111111111111111111111.doc
yaoni1025 2011-06-25
  • 打赏
  • 举报
回复
string filename = HttpUtility.UrlEncode("动态生成.xls");
context.Response.AddHeader("Content-disposition",string.Format("attachment:filename={0}",filename));
这种方法也可以吧》。。
brandon.qev 2011-05-23
  • 打赏
  • 举报
回复
顶一下
love_zhangyu 2010-12-30
  • 打赏
  • 举报
回复
顶一下,lz给我解决大问题了 嘿嘿
fenghuazai 2010-09-17
  • 打赏
  • 举报
回复 1
顶一下!response.setHeader("Content-Disposition","attachment;filename="+new String (filename.getBytes("gb2312"),"iso-8859-1"));这句可以处理乱码
bwlovejjp 2009-09-22
  • 打赏
  • 举报
回复
原来如此,豁然开朗啊!
kakukonrin 2009-05-13
  • 打赏
  • 举报
回复
good, 学习了。
kkndgto 2009-02-28
  • 打赏
  • 举报
回复
顶!!看完楼主的解决方案豁然开朗!解决了问题!!
wubai996 2009-01-15
  • 打赏
  • 举报
回复
fefe
Jacky_Zhu_1983 2009-01-14
  • 打赏
  • 举报
回复 1
我一般都用
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) ); 也可以

顶下~~~


dirtykiss 2009-01-14
  • 打赏
  • 举报
回复
谢谢LZ,比较实用。中文乱码一直是头疼的问题!
yuanjianbin 2009-01-14
  • 打赏
  • 举报
回复
楼主的方法让我豁然开朗。以前发现这个问题只是想办法把文件名改成英文的。

楼主英明神武,帮顶一下!谢谢分享!
fulianglove 2009-01-14
  • 打赏
  • 举报
回复
顶一下!

81,119

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧