ASP.NET和C#如何实现高效的数据绑定?

2026-04-27 11:222阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计781个文字,预计阅读时间需要4分钟。

ASP.NET和C#如何实现高效的数据绑定?

该网站在ASP.NET网页中有一段下载Word/Excel文件的程序。最近用户需要求的文件名包含繁体中文,使用Chrome/Firefox浏览器测试下载均很正常,但用IE(版本11)启动时,却出现了问题。

负责的网站在ASP.NET网页有一段下载Word/Excel文件的程序,最近使用者要求的文件名称内含繁体中文字,
同事用chrome/firefox浏览器测试下载都很正常显示,但用IE(版本11)开启时,却出现了乱码。


1.准备一个中文文件名的文件

ASP.NET MVC

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.执行下载

ASP.NET和C#如何实现高效的数据绑定?

文件名不正常

找到两个解法

  1. 将中文文件名用HttpUtility.UrlEncode以UTF8编码系统进行QP编码。
  2. HeaderEncoding编码改为BIG5

(1)将中文文件名用HttpUtility.UrlEncode以UTF8编码系统进行QP编码

string fileName = HttpUtility.UrlEncode(Path.GetFileName(filepath)); //string fileName = Path.GetFileName(filepath);


HttpUtility.UrlEncode默认会以UTF8的编码系统进行QP(Quoted-Printable)编码,可以直接显示的7 Bit符(ASCII)就不用特别转换。

  • 编码前:.docx
  • 编码后:%e4%b8%ad%e6%96%87%e6%aa%94%e5%90%8d.docx

除了标准ASCII,其他都会用UTF8进行编码送到前端浏览器。
mothereff.in/utf-8

文件名可以正常显示中文了!

(2)HeaderEncoding编码改为BIG5

增加一行设定HeaderEncoding的程序,因为服务器都是繁体中文,默认Encoding.Default = BIG5

HttpContext.Current.Response.HeaderEncoding = System.Text.Encoding.Default;

默认HttpContext.Current.Response.HeaderEncoding是UTF8,将编码改为BIG5也可以解决中文文件名问题

都已经是UTF8编码的网页了,为什么还得要将HeaderEncoding编码改为繁体中文操作系统的BIG5才能解决???
进一步搜寻到保哥、黑暗大文章,看起来似乎与浏览器支持到哪一种Content-Disposition标准有关(RFC2045、2183、5987)。
好,先到此打住,来看奥运了!以后有时间再继续深入调查。


小结:

  • 因为系统被要求要支持多国语系,暂时我们选择第一种解法,以后出现蝌蚪文还是火星文就不怕了。
  • ASP.NET MVC已经解决了文件名有中文码问题了。

参考:

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#]下载文件时中文文件名出现乱码

本文共计781个文字,预计阅读时间需要4分钟。

ASP.NET和C#如何实现高效的数据绑定?

该网站在ASP.NET网页中有一段下载Word/Excel文件的程序。最近用户需要求的文件名包含繁体中文,使用Chrome/Firefox浏览器测试下载均很正常,但用IE(版本11)启动时,却出现了问题。

负责的网站在ASP.NET网页有一段下载Word/Excel文件的程序,最近使用者要求的文件名称内含繁体中文字,
同事用chrome/firefox浏览器测试下载都很正常显示,但用IE(版本11)开启时,却出现了乱码。


1.准备一个中文文件名的文件

ASP.NET MVC

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.执行下载

ASP.NET和C#如何实现高效的数据绑定?

文件名不正常

找到两个解法

  1. 将中文文件名用HttpUtility.UrlEncode以UTF8编码系统进行QP编码。
  2. HeaderEncoding编码改为BIG5

(1)将中文文件名用HttpUtility.UrlEncode以UTF8编码系统进行QP编码

string fileName = HttpUtility.UrlEncode(Path.GetFileName(filepath)); //string fileName = Path.GetFileName(filepath);


HttpUtility.UrlEncode默认会以UTF8的编码系统进行QP(Quoted-Printable)编码,可以直接显示的7 Bit符(ASCII)就不用特别转换。

  • 编码前:.docx
  • 编码后:%e4%b8%ad%e6%96%87%e6%aa%94%e5%90%8d.docx

除了标准ASCII,其他都会用UTF8进行编码送到前端浏览器。
mothereff.in/utf-8

文件名可以正常显示中文了!

(2)HeaderEncoding编码改为BIG5

增加一行设定HeaderEncoding的程序,因为服务器都是繁体中文,默认Encoding.Default = BIG5

HttpContext.Current.Response.HeaderEncoding = System.Text.Encoding.Default;

默认HttpContext.Current.Response.HeaderEncoding是UTF8,将编码改为BIG5也可以解决中文文件名问题

都已经是UTF8编码的网页了,为什么还得要将HeaderEncoding编码改为繁体中文操作系统的BIG5才能解决???
进一步搜寻到保哥、黑暗大文章,看起来似乎与浏览器支持到哪一种Content-Disposition标准有关(RFC2045、2183、5987)。
好,先到此打住,来看奥运了!以后有时间再继续深入调查。


小结:

  • 因为系统被要求要支持多国语系,暂时我们选择第一种解法,以后出现蝌蚪文还是火星文就不怕了。
  • ASP.NET MVC已经解决了文件名有中文码问题了。

参考:

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#]下载文件时中文文件名出现乱码