下载文件时的重命名问题(截断或乱码)在下载文件时,使用的是ID+Name的存储方式跟踪断点,文件名没有出现乱码
下载文件时的重命名问题(截断或乱码)
在下载文件时,使用的是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));
参考
[解决办法]关注一下 我也遇到相同的情况
[解决办法]换Encoding.Default.GetBytes(fileName) 也不行?
[解决办法]VS bug?
[解决办法]应该就是编码的问题,几种常用的都试试
[解决办法]这个我也遇到过,找了很久也没找到好的解决办法,只能命名短一点了
[解决办法]直接放弃中文多简单=.=~~