ASP .NET下载与日文文件名的文件

我目前正在为我的ASP .NET应用程序使用Visual Studio 2008。 我正在尝试通过Response对象来服务于一个Excel文件。 问题是我似乎无法将文件的标题设置为日文。 如果我将它设置为日文文件名,它会作为垃圾文字返回。 我正在日文WinXP中使用日文IE浏览器。

Response.AppendHeader("Content-Type", "application/vnd.ms-excel"); Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", "日本語.xls")); 

要么

 Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", Server.HtmlEncode("日本語.xls"))); 

我已经尝试将编码更改为Shift-JIS

 Response.Charset = "Shift_JIS"; 

要么

 Response.Charset = "sjis"; 

有任何想法吗? 顺便说一句,我也有与Visual Studio 2005相同的问题。

我不是一个ASP专家,但你有没有尝试使用UrlEncode重新编码的文件名?

 Response.AddHeader("Content-Disposition", System.Web.HttpUtility.UrlEncode(String.Format("attachment; filename=\"{0}\"", "日本語.xls"))); 

Response.Charset只关心HTTP请求的主体。 根据HTTP规范 ,头部被隐含地编码为ISO-8859-1 – 编码之外的字符必须是MIME编码的 。

这只是合乎逻辑的 – 毕竟,由Response.Charset设置的正文编码本身是在标题中指定的。

我得到它的工作,最后… 🙂

System.Web.HttpUtility.UrlPathEncode使用解决了垃圾问题,但是当你打开文件时,它会在文件名中显示unicode未编码的名字,而不是实际的日文字符(这是IE7和IE6中的问题,UrlPathEncode工作正常与IE8。)

所以,而不是使用System.Web.HttpUtility.UrlPathEncode你应该使用用于响应头的编码解码filname。

在.NET中,默认情况下,响应头的编码是utf-8,将其更改为iso-8859-1。 修改web.config相同,如下所示,

 <globalization responseHeaderEncoding="iso-8859-1" .../> 

而代码将是,

  //apply Response header's encoding ie iso-8859-1 to the filename. Dim fileName as String = "在庫あり全商品を24時間以内に出荷.doc" Dim enc As Encoding = Encoding.GetEncoding("shift_jis") Dim dec As Encoding = Encoding.GetEncoding("iso-8859-1") fileName = dec.GetString(enc.GetBytes(fileName)) //Show Download Dialog box and Writting it on Client Side. Response.ClearHeaders() Response.ContentType = corspBean.ContentType Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") Response.BinaryWrite(bytes) Response.End() 

现在,更重要的是,我浪费了很多时间,因为它, 这是不适用于ASP.NET开发服务器,即用于testing/debugging本地机器上的Web应用程序的服务器。 因此,将解决scheme部署在IIS上并从那里进行testing。 它在IIS上工作得很好。 (而IIS是每个ASP.NET应用程序的命运;所以不pipe它是否在ASP.NET开发服务器上运行都没关系)