导出Excel,汉字出现乱码

starryit 2012-02-12 08:48:59
把“Table控件”中的内容导到Excel中,方法如下:
Response.AppendHeader("Content-Disposition", "attachment;filename=Report" + "TransverseContrast" + ".xls");
Response.ContentType = "application/ms-excel";

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

//关闭控件的视图状态
tblResult.Page.EnableViewState = false;

//初始化HtmlWriter
System.IO.StringWriter writer = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
tblResult.RenderControl(htmlWriter);

//输出
Response.Write(writer.ToString());
Response.End();

1、在自己的开发机上没有任何问题,导出效果如下:


2、但是在发布和部署到服务器上之后,导出Excel,汉字出现了乱码,效果如下:



问题一:是不是和服务器的环境有关系?服务器是Win2003英文版,打得中文语言包。是不是“GB2312”改为“UTF8”就好了???

问题二:是不是,中文操作系统就要“GB2312”,英文操作系统就要“UTF-8”???


换用一种方法;
var stringWriter = new StringWriter();
var htmlWriter = new HtmlTextWriter(stringWriter);
tblResult.RenderControl(htmlWriter);

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=TransverseContrast.xls");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.Write(stringWriter.ToString());
HttpContext.Current.Response.End();


问题三:"System.Text.Encoding.UTF8"编码,在服务器(Win2003英文版)上导出正常,但是在我的系统环境下(Win7中文版 VS2010)出现乱码。“System.Text.Encoding.UTF8”改为“System.Text.Encoding.Defualt”,在我的机器上正常,在服务器上乱码。请问这是为什么?



...全文
730 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingken001 2012-02-13
  • 打赏
  • 举报
回复
多试一下,以上的肯定可以解决问题,但是以后要保证没问题,需要从设置入手!
Ryan20082009 2012-02-13
  • 打赏
  • 举报
回复
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
wosizy 2012-02-12
  • 打赏
  • 举报
回复
我这里导出的中文名称! LZ可以试试看!!!

#region 导出EXCEL
//导出Excel
protected void btn_Excel_Click(object sender, EventArgs e)
{
Export("application/ms-excel", "导出EXCEL.xls");
}
private void Export(string FileType, string FileName)
{
//以下三行可选,如果没有的话导出的只是当前页数据,没有其他页数据
//this.Grv_Outlay.AllowPaging = false;
//this.Grv_Outlay.AllowSorting = false;
//Grv_Date();//这里是你绑定gridview的方法
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
this.Grv_Depot.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
Response.Clear();
Response.Close();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
#endregion
bakdfkuk 2012-02-12
  • 打赏
  • 举报
回复
乱码一般都是编码的问题,改成UTF-8试试,应该就可以搞定了

Response.Charset = "GB2312";???
段传涛 2012-02-12
  • 打赏
  • 举报
回复
乱码? 试试这个
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);

//GridView2.RenderControl(hw);
//GV_cg.RenderControl(hw);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧