[ASP.NET][C#]下载文件时中文文件名出现乱码
负责的网站在ASP.NET网页有一段下载Word/Excel文件的程序,最近使用者要求的文件名称内含繁体中文字,
1.准备一个中文文件名的文件 2.在HomeControler中加入下载程序Download public ActionResult Download() { //文件位置 string filepath = @"E:testWebApplication1中文文件名.docx"; //文件名称 string filename = Path.GetFileName(filepath); //读成串流 Stream sfilestream = new FileStream(filepath,FileMode.Open,FileAccess.Read,FileShare.Read); //回传出文件 return File(sfilestream,"application/vnd.openxmlformats-officedocument.wordprocessingml.document",filename); } 3.执行下载 文件名正常显示中文! 换上ASP.NET Web Form 4.先增一支Download.aspx 在Page load加入下载程序 protected void Page_Load(object sender,EventArgs e) { string filepath = @"E:testWebApplication1中文文件名.docx"; string fileName = Path.GetFileName(filepath); HttpContext.Current.Response.AppendHeader("content-disposition","attachment;filename=" + fileName); HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; HttpContext.Current.Response.WriteFile(filepath); HttpContext.Current.Response.End(); } 5.执行下载 文件名不正常 找到两个解法
(1)将中文文件名用HttpUtility.UrlEncode以UTF8编码系统进行QP编码 string fileName = HttpUtility.UrlEncode(Path.GetFileName(filepath)); //string fileName = Path.GetFileName(filepath);
除了标准ASCII,其他都会用UTF8进行编码送到前端浏览器。 文件名可以正常显示中文了! (2)HeaderEncoding编码改为BIG5 增加一行设定HeaderEncoding的程序,因为服务器都是繁体中文,默认Encoding.Default = BIG5 HttpContext.Current.Response.HeaderEncoding = System.Text.Encoding.Default; 默认HttpContext.Current.Response.HeaderEncoding是UTF8,将编码改为BIG5也可以解决中文文件名问题
都已经是UTF8编码的网页了,为什么还得要将HeaderEncoding编码改为繁体中文操作系统的BIG5才能解决???
参考: HttpResponse 类 HttpUtility.UrlEncode HttpResponse.HeaderEncoding KB-Open And Download File In Chinese Filename ASP.NET 如何设定强制下载文件并正确处理中文文件名的问题 How to encode the filename parameter of Content-Disposition header in HTTP? 原文:大专栏 ?[ASP.NET][C#]下载文件时中文文件名出现乱码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在Html.ActionLink的linkText中使用HTML标签
- ASP.NET MVC CAPTCHA实现
- 在asp.net c中添加Master页面后,MySql主机出错
- asp.net jquery ajax json:交换数据的简单例子
- asp.net-mvc – 使用Data Annotation验证DateTime(日期和时
- asp.net-core – 如何检索当前响应体长度?
- asp.net-mvc – ASP MVC中的自定义错误处理
- ASP.Net MVC4 WebApi代理
- nuget 包是如何还原的
- asp.net-mvc – ASP.NET MVC FluentValidation PartialView
- 在ASP.NET中验证上载文件的ContentType
- asp.net-mvc – .NET MVC不显眼的验证和自定义模
- asp.net – 通过<%on .aspx页面绑定
- asp.net – GridView:选择页面按钮(数字)样式
- 如何在ASP.NET WebForm中使用Ninject注入依赖项?
- asp.net-mvc – 如何从自定义模型绑定器中删除魔
- asp.net-mvc – Spark View Engine的性能与ASP.N
- asp.net – 使用Linq查询从DropDownList中选择一
- asp.net – iis将子域重定向到同一子域的子文件夹
- asp.net – HttpClient:通常只允许使用每个套接