添加特殊字符到HttpContext.Current.Response.AddHeader()

时间:2015-06-05 10:26:20

标签: internet-explorer c#-4.0 httpresponse

我想生成带有特殊字符的PDF文件。

我的代码如下:

 MemoryStream memoryStream = // get memory stream relevant to pdf file
 HttpContext.Current.Response.Clear();
 HttpContext.Current.Response.Buffer = true;
 HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF32;               
 HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.pdf", downloadLink));
 HttpContext.Current.Response.ContentType = @"application/pdf";
 HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray());

这适用于downloadLink的普通字符。但对于ABC_50_Română等特殊字符,则下载文件包含名称为ABC_50_Română且无法识别的字符。

我尝试使用System.Text.Encoding.UTF32;和Encoding.GetEncoding("Windows-1252") ContentEncoding。但无法解决问题。

修改 仅在 Internet Explorer

中会出现此问题

1 个答案:

答案 0 :(得分:0)

我在调用Response.AppendHeader之前将FileName转换为UTF8解决了这个问题

        if ((HttpContext.Current.Request.Browser.Type.ToUpper(CultureInfo.InvariantCulture).StartsWith("IE")) || (HttpContext.Current.Request.Browser.Type.ToUpper(CultureInfo.InvariantCulture).StartsWith("INTERNETEXPLORER")))
            downloadLink = HttpUtility.UrlEncode(downloadLink, UTF8Encoding.UTF8).Replace("+", " ");

Here

中找到的好文章