asp.net - Response.Write - Internet Explorer 中的文件名编码错误

标签 asp.net internet-explorer encoding

我使用以下代码将文件从服务器发送到客户端:

Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
Response.ContentType = MimeType;
Response.WriteFile(PathToFile);
Response.End();

这很好用。问题是,当我从 Internet Explorer 下载文件时,特殊字符(例如丹麦语 æ、ø 和 å)会被错误解释。因此,我将名称为“Test æ ø å file.txt”的文件下载为“Test �_à_ॠfile.txt”

我尝试在响应中添加字节顺序标记:

byte[] BOM = { 0xEF, 0xBB, 0xBF };
Response.BinaryWrite(BOM);

并设置字符集:

Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;

但如果有帮助的话就没有。 这似乎只是 Internet Explorer 中的问题。

最佳答案

header 不使用内容的编码,因此更改内容编码没有帮助。有一个指定 header 参数编码的标准,但它是相当新的,因此并非所有浏览器都完全支持它:

http://greenbytes.de/tech/webdav/rfc5987.html

这是您对名称进行编码的方式:

string FileName = "Test æ ø å file.txt";

string name = String.Concat(Encoding.UTF8.GetBytes(FileName).Select(b => {
  if ((b >= 48 && b <= 57) || (b >= 65 && b <= 90) || (b >= 97 && b <= 122)) {
    return new String((char)b, 1);
  } else {
    return String.Format("%{0:x2}", b);
  }
}).ToArray());

Response.AppendHeader("content-disposition", "attachment; filename*=UTF-8''" + name);

标题中结束的文本如下所示:

attachment; filename*=UTF-8''Test%20%c3%a6%20%c3%b8%20%c3%a5%20file%2etxt

注意:该代码对除字母数字之外的所有字符进行编码。这是可行的,但并非所有其他字符都需要编码。在检查标准后,您可以改进代码以保留更多未编码的字符。

关于asp.net - Response.Write - Internet Explorer 中的文件名编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434239/

相关文章:

c# - 无法使用Windows身份验证IIS登录网站

javascript - JQuery .html() 删除 IE 8 上的换行符

python - 电子邮件主题中的编码如何工作? ( Django / python )

ios - NSCoder对c数据类型的编码和解码

javascript - javascript代码的奇怪问题

asp.net - DataTable Wrapper 或如何将 UI 与业务逻辑分离

jquery - 如何替换 aps.net 标签内的 anchor 文本?

html - IE 9 的 Magic Zoom z-index 问题

c# - 使用 c# asp.net/MVC 在 Web 浏览器上打开一个巨大的 excel 文件中的单个工作表(单个选项卡)

internet-explorer - 如何将ActiveX控件转换为NPAPI插件