导出excel遇到中文乱码

ant200902 2016-09-13 05:43:37
一下是我的两种方式,都是一样乱码.
方法1:
Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.BufferOutput = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.csv", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)));
Response.ContentType = "text/h323;charset=gbk";
Response.BinaryWrite(buffer);
Response.End();

方法2:
Response.Clear();
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName + ".csv"));
Response.AddHeader("Content-Length", buffer.Length.ToString());
Response.BinaryWrite(buffer);
Response.End();
谢谢。
...全文
2648 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 jjkk168 的回复:
还有一种方法,你在你的Response.BinaryWrite(buffer);前面加入下面一行语句

Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });
太强了 韩语的也搞定了
还想懒够 2016-10-11
  • 打赏
  • 举报
回复
还有一种方法,你在你的Response.BinaryWrite(buffer);前面加入下面一行语句

Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });
ant200902 2016-10-09
  • 打赏
  • 举报
回复
感谢1#, 换成另外一种方式fixe了。留给后人使用。 protected void Export(DataTable dt, string fileName) { if (dt.Rows.Count <= 0) return; this.Page.Response.Clear(); Page.Response.Buffer = true; Page.Response.Charset = "utf-8"; //01-1 Page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); //设置输出流为简体中文 Page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); //设置输出文件类型为excel文件 Page.Response.ContentType = "application/ms-excel"; //Page.EnableViewState = false; Page.Response.Write(TableToHtml(dt)); Page.Response.End(); } private string TableToHtml(System.Data.DataTable dt) { StringBuilder sb = new StringBuilder(); sb.AppendLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"); sb.AppendLine("<style>td { mso-number-format:\\@; } </style>"); sb.AppendLine("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">"); //写出列名 sb.AppendLine("<tr style=\"white-space: nowrap;height:20\">"); foreach (object name in TableHeaders) { sb.AppendLine("<td>" + name.ToString() + "</td>"); } sb.AppendLine("</tr>"); sb.Append("<tr>"); for (int i = 0; i < dt.Rows.Count; i++) { foreach (object obj in FieldList.Split(',')) { sb.Append("<td>" + dt.Rows[i][obj.ToString()].ToString() + "</td>"); } sb.AppendLine("</tr>"); } sb.AppendLine("</table>"); return sb.ToString(); }
ant200902 2016-09-14
  • 打赏
  • 举报
回复
引用 5 楼 ant200902 的回复:
[quote=引用 2 楼 abz7676 的回复:] 如果还出现乱码,你的方法一改成下面的再试试:


            Response.ClearHeaders();
            Response.Clear();
            Response.Expires = 0;
            Response.BufferOutput = true;            
            Response.ContentEncoding = System.Text.Encoding.Default;
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.csv", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default)));
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(buffer);
            Response.End();

我怀疑是我操作系统的问题,win 7 英文版[/quote] 一把编码方式改成Encoding.UTF8,可以导出excel,不是aspx网页了。但是还是乱码。用default的编码方式,是网页不会乱码。
ant200902 2016-09-14
  • 打赏
  • 举报
回复
引用 2 楼 abz7676 的回复:
如果还出现乱码,你的方法一改成下面的再试试:


            Response.ClearHeaders();
            Response.Clear();
            Response.Expires = 0;
            Response.BufferOutput = true;            
            Response.ContentEncoding = System.Text.Encoding.Default;
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.csv", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default)));
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(buffer);
            Response.End();

我怀疑是我操作系统的问题,win 7 英文版
还想懒够 2016-09-14
  • 打赏
  • 举报
回复
你导出的是CSV,在Excel里面打开CSV显示中文为乱码这太正常了。用Notepad++打开看看是不是乱码就行了。
ant200902 2016-09-13
  • 打赏
  • 举报
回复
引用 2 楼 abz7676 的回复:
如果还出现乱码,你的方法一改成下面的再试试:


            Response.ClearHeaders();
            Response.Clear();
            Response.Expires = 0;
            Response.BufferOutput = true;            
            Response.ContentEncoding = System.Text.Encoding.Default;
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.csv", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default)));
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(buffer);
            Response.End();

谢谢,你的代码确实能导出,但是导出的网页文件,不是excel。请问导出excel怎么做?
abz7676 2016-09-13
  • 打赏
  • 举报
回复
如果还出现乱码,你的方法一改成下面的再试试:


            Response.ClearHeaders();
            Response.Clear();
            Response.Expires = 0;
            Response.BufferOutput = true;            
            Response.ContentEncoding = System.Text.Encoding.Default;
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.csv", System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default)));
            Response.ContentType = "application/ms-excel";
            Response.BinaryWrite(buffer);
            Response.End();

abz7676 2016-09-13
  • 打赏
  • 举报
回复


Response.Charset = "GB2312";

改成


Response.Charset = "UTF-8";

62,046

社区成员

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

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

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

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