20071116 IE FIREFOX 文件 生成 下载
http://www.yippeesoft.com

http://www.cnblogs.com/lovecherry/archive/2005/03/25/125519.html
(原创)datagrid数据导出到excel文件给客户端下载的几种方法
方法二:导出到csv文件,不存放到服务器,直接给浏览器输出文件流

优点:
1、随时生成,不需要占用资源
2、可以结合身份认证
3、同样利于数据交换

实现方法:
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlDataAdapter da=new SqlDataAdapter("select * from tb1",conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"table1");
   DataTable dt=ds.Tables["table1"];
   StringWriter sw=new StringWriter();
   sw.WriteLine("自动编号,姓名,年龄");
   foreach(DataRow dr in dt.Rows)
   &leftsign;
    sw.WriteLine(dr["ID"]+","+dr["vName"]+","+dr["iAge"]);
   &rightsign;
   sw.Close();
   Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
   Response.ContentType = "application/ms-excel";
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
   Response.Write(sw);
   Response.End();

asp.net 动态地生成文件下载

       string str = "1234567890"; //测试用的文件内容
       string fileName = "测试文件.txt"; //测试用的文件名称
       byte[] DocBuffer= System.Text.Encoding.UTF8.GetBytes(str); //转换成字节流

       Response.Clear();
       fileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(fileName));//(这里是你要的文件名称)
       Response.AppendHeader("Content-Disposition", "attachment;filename=" +fileName);
       Response.ContentType = "application/octet-stream";
       Response.Charset  =  "UTF-8";
       Response.ContentEncoding  =System.Text.Encoding.UTF8;
       Response.BinaryWrite(DocBuffer);    
       Response.End();  //结束文件流输出

关于UTF-8中文导出为excel文件直接打开后乱码的问题
关键字:   中文乱码 csv   

我现在遇到了这么一个问题,就是要将从数据库中查询出的内容从页面中导出为.csv文件,现在的问题是导出后在弹出的对话框中选择直接用excel打开,结果发现数据库中的utf-8编码的中文都显示乱码(数据直接显示在页面上是正确的),但是如果我不直接打开选择保存到本地,然后打开一个空白excel文件选择在数据菜单上选择导入外部数据,一直确定,显示的即是正确的内容。

听同事说在别的语言,可以将UTF-8数据转换为UNICODE,然后将UNICODE转换为ASCII码,就可以解决这个问题,但是我不知道在java里面有没有这样的转换函数,或是别的组件里面时都有?

首先文件名是是以utf-8编码保存在数据库中,文件名暂定为1_中文文件123.txt,然后作如下处理来下载
response.setContentType("application/octet-stream;charset=UTF-8");
fileName=java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
此时在ie下面点击文件下载的时候能够正确显示中文名称1_中文文件123.txt%0A,但是文件名的结尾却出现%0A字符(个人猜测是结束符的utf-8编码);但是此时在firefox下面却显示1_%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6123.txt %0A

然后我又试了另一种方案
response.setContentType("application/octet-stream;charset=UTF-8");
fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
此时在ie下面下载的时候弹chu的文件名是乱码;而在firefox下面却正确显示1_中文文件123.txt。

http://eddysheng.javaeye.com/blog/50414

历史博文

标签:, , ,
八月 27, 2008 at 12:57 下午 by yippee 1,039 次
Category: Info
Tags: , , ,