向 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.UTF32
; Encoding.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
中找到了好文章
我想生成带有特殊字符的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
中出现我通过在调用 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
中找到了好文章