下载文件时的重命名问题(截断或乱码)
在下载文件时,使用的是ID+Name的存储方式
跟踪断点,文件名没有出现乱码
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName) + "\"");
使用这一句,对于超过17个汉字的文件名,就会被截断(还好,只是把前面的部分给抛弃了,扩展名还在)
但是对于很多管理公文这样的系统,长文件名那肯定是特别常见的(关于开展庆祝建党90周年暨首届XXXX市党建先进十大人物评选活动的通知.doc)
搜索了资料,这个问题很普遍,有解决方案建议强制使用gb2312编码,
Encoding code = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = code;
Response.HeaderEncoding = code;//这句很重要
但是我遇到以下两种情况:
1)
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
这样用的话,得到的文件名根本不对,扩展名没有了,而且整个文件很短(比如CABYSCW.)
2)
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName, code)+ "\"");
这样的话,得到的文件名出现了中文乱码
5?90?ж??????.doc
已经在Web.config文件中声明
<globalization requestEncoding= "gb2312" responseEncoding= "gb2312" />
并在这个DownloadAttach.aspx页面中添加
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
下载还是不对
请问各位是如何解决的?
------解决方案--------------------考虑重命名文件吧= =
或者在下载前,加上一个方法,先让原文件名存到系统剪切板里
------解决方案--------------------Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName) + "\"");
的上一句怎么写的
如果是string filename=System.Web.HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(fileName));
改成string filename=System.Web.HttpUtility.UrlEncode(Encoding.Default.GetBytes(fileName));
参考
------解决方案--------------------关注一下 我也遇到相同的情况
------解决方案--------------------