为什么我的文件结果文件名已损坏IE9?

Nen*_*lep 5 .net utf-8 filestreamresult internet-explorer-9 asp.net-mvc-3

我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:aäa.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示:

         Ie9文件名问题

在Chrome中,它按预期工作.这是return语句:

return File(fileStream: stream, 
            contentType: System.Net.Mime.MediaTypeNames.Application.Octet, 
            fileDownloadName: myModel.Name + "." + pub.OutputFileType);
Run Code Online (Sandbox Code Playgroud)

我该如何解决IE 9的问题?

Nen*_*lep 2

看来这对于 IE9 来说是根本不可能的,正如注释中的 namesv 所说。我最终通过滥用浏览器功能解决了这个问题:当它请求类似内容/foo/file\xc3\x84\xc3\x96.pdf并返回文件时,将使用 URL 中的“文件名”。

\n\n

因此,我创建了一条新路线,将动态下载定位到它,并在操作中执行此操作:

\n\n
if (Request.Browser.Browser == "IE" && Request.Browser.MajorVersion == 9)\n{\n    // The filename comes from the Route used, which is like host/Print/File.pdf\n    Response.Clear();\n    Response.AddHeader("Content-Disposition", "attachment");\n    Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Octet;\n    Response.Charset = "utf-8";\n    Response.HeaderEncoding = UnicodeEncoding.UTF8;\n    Response.ContentEncoding = UnicodeEncoding.UTF8;\n    byte[] buffer = new byte[4096];\n    int count = 0;\n\n    while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)\n    {\n        Response.OutputStream.Write(buffer, 0, count);\n        Response.Flush();\n    }\n    Response.End();\n    return null;\n}\nelse\n{\n    return File(\n        fileStream: stream,\n        contentType: System.Net.Mime.MediaTypeNames.Application.Octet,\n        fileDownloadName: compilation.Name + "." + pub.OutputFileType);\n}\n
Run Code Online (Sandbox Code Playgroud)\n