如何解决IE下载时中文文件名变乱码的问题
问题现象 当我们使用 IE 浏览器下载中文文件名的文件时,先弹出“文件下载”对话框如下: 如果你点击“保存”的话,没有任何问题。但是如果你点击“打开”按钮的话,你会发现文件名变成了一串乱码,见下图 背景 文件下载功能所对应的服务端 ASP.NET 代码如下: String value = “test”; Response.Clear(); Response.ClearHeaders(); Response.Buffer = false; Response.ContentType = “application/octet-stream”; Response.ContentEncoding = System.Text.Encoding.UTF8; String filename = HttpUtility.UrlEncode(“中文.txt”, System.Text.Encoding.UTF8); //对中文文件名进行HTML转码 Response.AddHeader(“CONTENT-LENGTH”, value.Length.ToString()); Response.AddHeader(“Content-Disposition”, “attachment; filename=” + filename); Response.CacheControl = “public”; Response.Write(value); Response.Flush(); Response.End(); 环境 实际上此问题只在 IE6 、 IE7 的环境下发生, IE8 以上版本没有问题 问题起因 如果你通过 Fiddler 之类的工具来抓取 HTTP 包的话,可以看到服务器段发回来的 Response Header 如下。 HTTP/1.1 200 OK Server: ASP.NET Development Server/9.0.0.0 Date: Sun, 09 Oct 2011 07:32:12 GMT X-AspNet-Version: 2.0.50727 Content-Length: 4 Content-Disposition: attachment; filename=b8e687.txt Cache-Control: public Content-Type: application/octet-stream Connection: Close 实际上文件名是由 Content-Disposition 头里面的 filename 信息来决定的,这是一串经过 URLEncode 之后的 UTF-8 码,并不是乱码,它所对应的文字信息正是 ” 中文 ” 两个字。对于 IE6 、 IE7 来讲,在弹出“文件下载”对话框的时候 IE 浏览器实际上已经把文件保存在临时目录,而文件名并没有做转码,所以在临时目录里面的文件名就是 b8e687[1].txt 。 如果你点击“保存”按钮的话,依然是由 IE 浏览器在处理保存文件的工作,所以它会自动转码;而当你点击“打开”按钮的时候, IE 浏览器只是负责通知相应的应用程序来打开临时目录里的文件,所以我们就看到了文件名在记事本里面显示为乱码的现象。 解决办法 我们所推荐的方式是升级到 IE8 或者以上版本。 如果不升级,针对 IE6 没有任何办法,针对 IE7 可以采取以下方法。 1) 下载最新的IE累积补丁。可以先访问 http://technet.microsoft.com/en-us/cc264855.aspx 找到所有的最新安全补丁。 注意:请访问英文网站,因为中文网站有时候可能没有及时更新 从列表里面找到Cumulative Security Update for Internet Explorer,如下图 进入相关链接(在此时最新的IE补丁是Microsoft Security Bulletin MS11-057),找到你的操作系统所对应的版本,比如我XP SP3的机器所下载的就是IE7-WindowsXP-KB2559049-x86-ENU.exe 2) 用以下命令来打补丁 IE7-WindowsXP-KB2559049-x86-ENU.exe /b:sp3qfe 注意:由于我的是XP SP3,所以/b后面对应的是sp3qfe;如果你是SP2的机器,就要用sp2qfe 3) 打完补丁添加以下注册表键值 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_ALLOW_LONG_INTERNATIONAL_FILENAMES] “iexplore.exe”=dword:00000001 4) 重起机器再测试 Zhixing From APGC DSI Team
Read the original here:
如何解决IE下载时中文文件名变乱码的问题


