dotnet 文件下载后文件名乱码
Response.ContentType = "application/x-msdownload;Charset=utf-8";
首先是Encoding
然后是FileName的地方用
然后把用于响应输出的aspx文件保存为UTF-8格式
最后是在webconfig里面设置
一个解决办法是,:
在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();