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

Add special characters to HttpContext.Current.Response.AddHeader()

我想生成带有特殊字符的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.UTF32Encoding.GetEncoding("Windows-1252") 代表 ContentEncoding 。但无法解决问题。

编辑: 此问题仅在 internet explorer

中出现

我通过在调用 Response.AppendHeader

之前将文件名转换为 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

中找到了好文章