我的程序中要自动生成文件下载,但下载以中文文件名会在下载确认窗体上显示乱码,英文文件名就不会,不知道如何解决,望高手指点。Response.Clear();
Response.BufferOutput=true;
Response.Charset="utf-8";//用“GB2312”也不行
Response.AppendHeader("Content-Disposition","attachment;filename=测试.xls");
Response.ContentType = "application/vnd.ms-excel";
FileInfo mf=new FileInfo(sFile);
FileStream fs=mf.OpenRead();
Response.WriteFile(fs.Handle,0,mf.Length);
fs.Close();另请教,我这里的文件是程序自动生成的,不存盘有没有办法能直接从内存中发送到客户端以附件下载??

解决方案 »

  1.   

    Response.AppendHeader("Content-Disposition","attachment;filename=测试.xls");-->Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("测试.xls"));不存盘有没有办法能直接从内存中发送到客户端以附件下载??我觉得应该可以实现,不过我不会..
      

  2.   

    加上Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");  
    再试试看。 
      

  3.   

    lz你是想直接给用户下载xls吧?
      

  4.   

    加上Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");  
    再试试看。 
    --------------------------------------这个试过,不行
      

  5.   

    你是用什么控件导出excel的?
      

  6.   

    我是这样做的没问题...                            
    Response.Charset="GB-2312";
    Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(filename+".xls"));
    Response.ContentEncoding=System.Text.Encoding.UTF7;
    Response.ContentType="application/ms-excel";
    Dat_Xianshi.Page.EnableViewState=false; 
    System.IO.StringWriter tw=new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter hw=new HtmlTextWriter(tw); 
    Dat_Xianshi.RenderControl(hw);
    Response.Write(""+tw.ToString()+"");
    Response.End();
      

  7.   

    如果是datagrid或者gridview这类就这样试试        Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            this.EnableViewState = false;        //定义输入流        System.IO.StringWriter writer = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter txtwriter = new HtmlTextWriter(writer);
            //将DataGrid中的内容输出到txtwriter流中
            this.dgList.RenderControl(txtwriter);        //作为附件输出,filename=ReqExcel.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc|.xls|.txt|.htm  
            Response.ContentType = "application/ms-excel"; //ContentType指定文件类型 可以为application/ms-excel    
            //application/ms-word | application/ms-txt | application/ms-html 或其他浏览器可直接支持文档          Response.AppendHeader("Content-Disposition", "attachment;filename=xxx.xls"); //下载
            //Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");   
            Response.Write(writer);        Response.End();
      

  8.   

    谢谢大家的帮助,中文文件名已解决。我导出Excel是通过Office提供的接口支持,通过Excel.Application生成Excel的,完全自己编码,不是通过DataGrid或DataList等控件的RenderControl方法导出的,生成后有个Sheets.SavaAs方法可以存盘,但我想不存盘就输出至客户端,因为输出到客户端之后,存盘的文件也就没用了,我现在是通过输出到客户端后在把文件删除来解决,但我觉得这样会多一次存盘又读取的过程,想有没有办法不存盘就直接输出到客户端。
      

  9.   

    编码一下文件名称。
      
    我的e-mail:[email protected],欢迎与我交流。
      

  10.   

    string FileName = myPageName + ".xls";        response.Clear();
            response.Buffer = true;
            response.Charset = "utf-8";
            response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
            response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            response.ContentType = "application/ms-excel";
      

  11.   

    把文件内容写在MemoryStream里,在写的时候用Response.BinaryWrite(m.GetBuffer()),其中m是MemoryStream对象。我就是这样来生成pdf的,然后直接发到客户端的。
      

  12.   

    受到启发!请问怎么代码生成PDF文件?
      

  13.   

    我的代码:
    Response.Clear()
    Response.Charset = "GB2312"
    Response.ContentEncoding = System.Text.Encoding.UTF8
    ' 添加头信息,为"文件下载/另存为"对话框指定默认文件名
    Response.AddHeader("Content-Disposition", "attachment filename=" + Server.UrlEncode("name.htm"))
    ' 添加头信息,指定文件大小,让浏览器能够显示下载进度
    Response.AddHeader("Content-Length", file.Length.ToString())' 默认为text/html方式
    Response.ContentType = "application/ms-html"Response.Write(strContent)strContent为字符串变量,内容为一个完整的Html文件。
    运行后发现将保存的内容包含当前ASPX页面内容,及Html内容+当前ASPX页面内容。
    而用Response.WriteFile(file)替换Response.Write(strContent)后一切正常。
      

  14.   

    Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");