//获取资源的编号
            string id = Request["id"].ToString();
            NRBLL.File bf = new Asiastar.NRBLL.File();
            Guid guid = new Guid(id);
            //获取资源完整路径
            string filepath = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString();
            //文件名称
            string filename = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FileNam"].ToString();
            filepath = Server.UrlDecode(filepath);
            filename = Server.UrlDecode(filename);
            //FileInfo fileinfo = new FileInfo(filepath);
            ////string filename = System.IO.Path.GetFileName(fileinfo.FullName);
            try
            {
                //string fileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(filename));
                //filename = filename.Replace("+", "%20");  //将“+”替换成“空格”
                // 以字符流的形式下载文件 
                FileStream fs = new FileStream(filepath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                Response.ContentType = "application/octet-stream";
                Response.ContentEncoding = Encoding.GetEncoding("gb2312");
                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();
            }
            catch (Exception exe)
            {
                Response.Write(exe.ToString());
            }保存是正常的 但是直接IE打开文件名称就是乱码了

解决方案 »

  1.   

    Response.ContentEncoding = Encoding.GetEncoding("gb2312");
    ---------
    怀疑是gb2312的问题
      

  2.   

    调试的异常是
    base {System.SystemException} = {由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。}
      

  3.   

    Response.Clear();
                Response.Charset = "GB2312";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=Report.xls");            string stringExportString = Slife.WebUtility.Utils.GetExportString(this.TableDate);
                Response.Output.Write(stringExportString);            Response.End();你试试我这种的?
      

  4.   

    ASP.NET 解决下载文件名乱码问题 
    string fileName="中文.xls";string filePath = @"/UpLoad/Reports"FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath(filePath)+fileName);   Response.Charset = "utf-8";   Response.ContentEncoding = System.Text.Encoding.UTF8;   // 添加头信息,为"文件下载/另存为"对话框指定默认文件名   Response.AddHeader("Content-Disposition", "attachment; filename=" +HttpUtility.UrlEncode("下载文
    件"+".xls",System.Text.Encoding.UTF8));   // 添加头信息,指定文件大小,让浏览器能够显示下载进度   Response.AddHeader("Content-Length", file.Length.ToString());   // 指定返回的是一个不能被客户端读取的流,必须被下载   Response.ContentType = "application/ms-excel";   // 把文件流发送到客户端   Response.WriteFile(file.FullName);   // 停止页面的执行   Response.End(); /////////////可用/////////////////////////////////////////////////////// ASP.NET实现下载功能的中文文件名乱码处理(收集)在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代码:...Response.ContentType = mime; //相应的MIME TYPEResponse.AppendHeader("Content-Disposition", "attachment; filename=\"" +fileName + "\"");Response.BinaryWrite(bytes);Response.End();...当fileName中包含中文时, 文件下载保存时, 文件名变成了乱码, 需要用户修改,解决办法1:对fileName进行URL编码, 把下划线标注的那句改为              Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + Server.UrlEncode(fileName) + "\"");便可.虽然中文乱码问题解决了, 但是还有一个问题: 在测试时, 下载保存的文件名有时会变成该页面的名字(.aspx), 虽然可以把内容下载到
    本地, 但是需要更改文件名及类型, 这样会给用户带来很大的困惑.还有一个办法, 可以很简单的解决以上的两个问题:解决办法2:        假设当前的URL为 http://localhost/download.aspx?id=123, fileName为"下载.pdf", 我们只要把下载URL改为
    http://localhost/download.aspx/下载.pdf?id=123 可, 上面下划线标注的那句代码则可以注释掉了
      

  5.   

    ... 无意间看到的 就解决了吧..
    Response.AddHeader("Content-Disposition", "attachment;filename="+Uri.EscapeDataString( FileName));