dotnet 文件下载后文件名乱码

Response.ContentType = "application/x-msdownload;Charset=utf-8";

首先是Encoding

Response.ContentEncoding = System.Text.Encoding.UTF8;


然后是FileName的地方用

System.Web.HttpUtility.UrlEncode(name)

然后把用于响应输出的aspx文件保存为UTF-8格式
最后是在webconfig里面设置

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8"/>

 

一个解决办法是,:

 在HttpUtility  的UrlEncode之后,  将  "+" 替换成"%20"(如果原来是 "+"   则被转换成"%2b" ), 如:  
  fileName=HttpUtility.UrlEncode(fileName,   Encoding.UTF8);  
  fileName=fileName.Replace("+",   "%20");  
  不明白微软为什么要把空格转换成加号而不是"%20".记得JDK的UrlEncoder是将空格转换成"%20"的.  
  经检查,在.Net2.0也是这样.  

=========================================================================

string fileName="中文.xls";

string filePath = @"/UpLoad/Reports"

FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath(filePath)+fileName);
   Response.Charset = "utf-8";
   Response.ContentEncoding = System.Text.Encoding.UTF8;

   // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
   Response.AddHeader("Content-Disposition", "attachment; filename=" +HttpUtility.UrlEncode("下载文件"+".xls",System.Text.Encoding.UTF8));
   // 添加头信息,指定文件大小,让浏览器能够显示下载进度
   Response.AddHeader("Content-Length", file.Length.ToString());
   // 指定返回的是一个不能被客户端读取的流,必须被下载
   Response.ContentType = "application/ms-excel";
   // 把文件流发送到客户端
   Response.WriteFile(file.FullName);
   // 停止页面的执行
   Response.End();

posted @ 2008-11-18 13:22  chunchill  阅读(399)  评论(0编辑  收藏  举报