Datagrid 导入到EXcel乱码的朋友,这里绝对解决

本文介绍了一种解决从Web应用导出Excel文件时出现乱码的方法。通过调整编码设置,并采用BIG5编码,成功解决了部分用户反馈的乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天怎么有客户反应导出的excel的乱码,??!!我记得我测试过的啊,后来我用服务器上的再测了下,确实有的会乱码有的却不会,真是奇怪,后来改它的编码utf-8 big5 都试了,就是不行,网上找了一个遇到同样问题的朋友的解决方案,确实可行!!不错,谢谢

被注释的是我之前用的,不好的方法,

        private void BtnPushExcel_Click(object sender, System.EventArgs e)
        
{
             
string fileName = "Excel.xls";
            Export(
this.DataGrid1,fileName);
//            HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); 
//            HttpContext.Current.Response.Charset ="UTF-8";     
//            //HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("BIG5");  
//            HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.GetEncoding("BIG5");  
//            HttpContext.Current.Response.ContentType ="application/ms-excel";
//            Datagrid2.Page.EnableViewState =false;    
//            System.IO.StringWriter  tw = new System.IO.StringWriter() ; 
//            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); 
//            this.DataGrid1.RenderControl(hw); 
//            HttpContext.Current.Response.Write(tw.ToString()); 
//            HttpContext.Current.Response.End(); 
                    
        
        }

 

 private   void   Export(System.Web.UI.WebControls.DataGrid   dg,string   fileName)   
                  {   
                            
                          System.Web.HttpResponse   httpResponse   
=   Page.Response;   
                          httpResponse.AppendHeader(
"Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));     
                          httpResponse.ContentEncoding
=System.Text.Encoding.GetEncoding("BIG5");   
                          httpResponse.ContentType   
="application/ms-excel";   
                          System.IO.StringWriter     tw   
=   new   System.IO.StringWriter()   ;   
                          System.Web.UI.HtmlTextWriter   hw   
=   new   System.Web.UI.HtmlTextWriter   (tw);   
                          dg.RenderControl(hw);   
                          
string   filePath   =   Server.MapPath("..")+fileName;   
                          System.IO.StreamWriter   sw   
=   System.IO.File.CreateText(filePath);   
                          sw.Write(tw.ToString());   
                          sw.Close();   
    
                          DownFile(httpResponse,fileName,filePath);   
                          httpResponse.End();   
                  }   
    
                  
private     bool   DownFile(System.Web.HttpResponse   Response,string   fileName,string   fullPath)   
                  {   
                          
try   
                          {   
                                  Response.ContentType   
=   "application/octet-stream";   
    
                                  Response.AppendHeader(
"Content-Disposition","attachment;filename="   +     
                                          HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)   
+   ";charset=BIG5");   
                                  System.IO.FileStream   fs
=   System.IO.File.OpenRead(fullPath);   
                                  
long   fLen=fs.Length;   
                                  
int   size=102400;//每100K同时下载数据     
                                  byte[]   readData   =   new   byte[size];//指定缓冲区的大小     
                                  if(size>fLen)size=Convert.ToInt32(fLen);   
                                  
long   fPos=0;   
                                  
bool   isEnd=false;   
                                  
while   (!isEnd)     
                                  {     
                                          
if((fPos+size)>fLen)   
                                          {   
                                                  size
=Convert.ToInt32(fLen-fPos);   
                                                  readData   
=   new   byte[size];   
                                                  isEnd
=true;   
                                          }   
                                          fs.Read(readData,   
0,   size);//读入一个压缩块     
                                          Response.BinaryWrite(readData);   
                                          fPos
+=size;   
                                  }     
                                  fs.Close();     
                                  System.IO.File.Delete(fullPath);   
                                  
return   true;   
                          }   
                          
catch   
                          {   
                                  
return   false;   
                          }   
                  }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值