首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#导出至excel中文乱码的有关问题

2012-12-17 
C#导出至excel中文乱码的问题被C#导出到excel中文乱码的问题折磨了好多天了,尝试过网上说的各种方法,都解

C#导出至excel中文乱码的问题
被C#导出到excel中文乱码的问题折磨了好多天了,尝试过网上说的各种方法,都解决不了,关键是乱码时有时没有,真的很崩溃,菜鸟求救,各位高手帮帮忙啊,先谢了~
代码如下


string filename = "aaa";
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8).ToString());
Response.Charset = "";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentEncoding = System.Text.Encoding.Default;
Response.Write(sb.ToString());
Response.Flush();
Response.End();
[最优解释]
试试

Response.Charset = "GB2312"; 

Response.ContentEncoding = System.Text.Encoding.UTF7;
[其他解释]
pre class="csharp" name="code">using System;  
using System.Collections;  
using System.Configuration;  
using System.Data;  
using System.Linq;  
using System.Web;  
using System.Web.Security;  
using System.Web.UI;  
using System.Web.UI.HtmlControls;  
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using System.Xml.Linq;  
using System.IO;  
using System.Data.OleDb;  
  
public partial class Default3 : System.Web.UI.Page  
{  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        if (!IsPostBack) {  
            Bind();     //窗体加载时向GridView中填充数据  
        }  
    }  
    PosDataContext pos = new PosDataContext();     //使用Linq to sql进行操作数据库的数据  
    //自定义向GridView控件填充数据方法  
    private void Bind()  
    {  
        GridView1.DataSource = pos.Product.ToList();   //填充数据  
        GridView1.DataKeyNames = new string[] {"Id" }; //设置主键字段  
        GridView1.DataBind();                       //将数据绑定到控件中  
  
    }  
    //导出数据事件  
    protected void btnExcel_Click(object sender, EventArgs e)  
    {  
        Export("application/ms-excel","商品信息报表.xls");  
    }  
    //自定义导出数据的方法  
    private void Export(string FileType, string FileName)  
    {  
        Response.Charset = "GB2312";                 //设置获取输出数据的类型  


        Response.ContentEncoding = System.Text.Encoding.UTF7;  
        //将Http头添加到输出流  
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());  
        Response.ContentType = FileType;  
        this.EnableViewState = false;  
        StringWriter tw = new StringWriter();  
        HtmlTextWriter hw = new HtmlTextWriter(tw);  
        GridView1.RenderControl(hw); //将GridView中的内容输出到指定字符串中  
        Response.Write(tw.ToString());  
        Response.End();           //将当前面的所有缓冲发送到客户端  
    }  
    //如果没有下面方法会报错类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内  
    public override void VerifyRenderingInServerForm(Control control)  
    {  
        //base.VerifyRenderingInServerForm(control);  
    }  
    //将Excel中的数据导入到指定控件中  
    public DataSet CreateDataSource() {  
        string strCon = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Excel.xls")+"; Extended Properties= Excle 8.0";  
            OleDbConnection olecon=new OleDbConnection(strCon);  
        OleDbDataAdapter myda=new OleDbDataAdapter("select * from [Sheet1$]",strCon);  
        DataSet myds=new DataSet();  
         myda.Fill(myds);  
        return myds;  
  
  
    }  
    //将数据从Excel导入到指定控件中  
protected void  btnExcelInfo_Click(object sender, EventArgs e)  
{  
     GridView1.DataSource= CreateDataSource();  
    GridView1.DataBind();  
}  
}  

[其他解释]
1、推荐首先选用IE浏览器下载试试,不要使用各种下载工具
2附带我最近遇到的一个小例子,打印出HTML页面内容
        Response.Clear();
        Response.Buffer = true;
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.ContentType = "application/vnd.ms-excel";
        this.EnableViewState = true;   




[其他解释]
你出现的问题是乱码,我出现的问题确是保存对话框总是一闪而过,也不报什么错误,我也不知道到底是哪里出错了。我在我们学校机房用那些代码就能成功,在我的机子上就出现这种情况,唉。
[其他解释]
试了,仍然会乱

引用:
试试

Response.Charset = "GB2312"; 

Response.ContentEncoding = System.Text.Encoding.UTF7;

[其他解释]
试了,仍然会乱
引用:
试试

Response.Charset = "GB2312"; 

Response.ContentEncoding = System.Text.Encoding.UTF7;

[其他解释]
总结:设置为UTF7后导出乱码,不是字符乱,是输出的感觉全是html语言;
后来在一个网页中找到了解决方法:
Response.Write("<html><head><meta http-equiv=Content-Type content="text/html; charset=gb2312">");
Response.Write(sb.ToString());
Response.Write("</body></html>");

这样就不会有问题了。
虽然不是在这里找到的答案,但是很感谢大家对我的帮助,给分结贴!!!
[其他解释]
好人那,我真好愁这个问题,谢谢

热点排行