ASP.net网页导出Excel中文乱码解决方案

  • 设置
  • 测试
  • 原因
  • 方法一
  • 方法二

设置

//清空缓存区的数据
Response.Clear();

//设置字符编码表
Response.Charset = “GB2312”;

//设置缓冲区使能可用
Response.Buffer = true;

//设置输出缓冲区数据的解码方式(ContentEncoding【内容Encoding】)
Response.ContentEncoding = System.Text.Encoding.GetEncoding(“GB2312”);

//配置文件输出文件方式、名称、类型、名称字符的解码方式
“Content-Disposition”:输出流头文
”name”:输出文件指定文件名
Response.AppendHeader(“Content-Disposition”, “attachment;filename=”" + ”name”, System.Text.Encoding.UTF8) + “.xls”");

//设置缓冲区输出文件的类型
Response.ContentType = “application/vnd.ms-excel”;

测试

网上很多方法都可以在ASP网页导出Excel,但输出时往往会发生中文输出到文件显示为“?”。
试过在输出语句Response.write()中增加:
<meta http-equiv=\"content-type\";charset=GB2312\"/>
测试还是输出“?”

原因

后来找到了原因,是因为ASP在输出缓冲区时,一旦遇到非"GB2312"编码的字符时,默认改为UT-8。
那么,只要在asp输出缓冲区时,每次强行将字符串设置为"GB2312"即可。
通过了解,实现这个方案可以通过绑定DataTable格式的方法,使默认输出为正确的中文字符。

方法一

        /// <summary> /// 把DataTable内容导出excel并返回客户端 /// </summary> /// <param name="dgData">待导出的DataTable</param> public static void DataTable2Excel(System.Data.DataTable dtData){System.Web.UI.WebControls.DataGrid dgExport = null;// 当前对话 System.Web.HttpContext curContext = System.Web.HttpContext.Current;// IO用于导出并返回excel文件 System.IO.StringWriter strWriter = null;System.Web.UI.HtmlTextWriter htmlWriter = null;if (dtData != null){// 设置编码和附件格式 curContext.Response.ContentType = "application/vnd.ms-excel";curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");curContext.Response.Charset = "gb2312";// 导出excel文件 strWriter = new System.IO.StringWriter();htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid dgExport = new System.Web.UI.WebControls.DataGrid();dgExport.DataSource = dtData.DefaultView;dgExport.AllowPaging = false;dgExport.DataBind();// 返回客户端 dgExport.RenderControl(htmlWriter);curContext.Response.Clear();curContext.Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=gb2312\"/>" + strWriter.ToString());curContext.Response.End();}}

引用自:https://blog.csdn.net/ranbolwb/article/details/7611811

此方法可以导出DataTable文件到Excel中,中文也不会显示乱码。但是...
如果数据量大的情况下,此方法会导致打开Excel文件很卡顿,而且修改内容的时候会很麻烦。
具体有兴趣的可以测试一下。

方法二

     /// <summary>/// DataTable中的数据导出到Excel并下载/// </summary>/// <param name="dt">要导出的DataTable</param>public void CreateExcel(DataTable dt){Response.Clear();Response.Charset = "GB2312";Response.Buffer = true;Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode("生产数据"+DateTime.Now.ToString("yyyyMMddHHmmss"), System.Text.Encoding.UTF8) + ".xls\"");Response.ContentType = "application/vnd.ms-excel";//导出表头Response.Write("<html><head><meta http-equiv=\"content-type\";charset=GB2312\"/><table><tr>");foreach(DataColumn dc in dt.Columns){Response.Write("<td style=\"border:solid;\">");Response.Write(dc.ColumnName);Response.Write("</td>");}Response.Write("</tr>");Response.Write("<br />");//导出数据foreach (DataRow dr in dt.Rows) {Response.Write("<tr>");for (int i = 0; i < dr.ItemArray.Length; i++){Response.Write("<td style=\"border:solid;\">");Response.Write(dr[i].ToString());Response.Write("</td>");}Response.Write("</tr>");}Response.Write("</table></body></html>");Response.End();}
方法二是我个人通过理解后写出的方法。
从ASP网页导出数据可以理解为,想服务器提交一个手写的网页数据,此处用DataTable为例:
服务器通过对DataTable输入缓冲区,然后发送到客户端给用户下载。
那么,相当于将想要导出的DataTable数据写成一个网页的形式,然后输出到缓冲区等待下载。
运用此方法后,个人所需及问题均完美解决。

ASP.net网页导出Excel中文乱码解决方案相关推荐

  1. php excelreader 中文,如何解决php excel reader导出excel中文乱码?

    解决php excel reader导出excel中文乱码的方法:1.如果不使用dump函数,可以通过修改[_defaultEncoding]变量解决问题:2.如果使用dump函数导出excel,需要 ...

  2. javascript导出excel中文乱码

    背景:html格式内容,但是以xls扩展名存放 症状:右键以记事本查看内容中文显示正常,但是用excel打开中文乱码 解决办法:往文件头加入BOM不可见字符 代码参考: //BOM在字符串拼接中使用\ ...

  3. java 导出excel 乱码_java 导出 Excel 中文乱码

    这样字导出的文件里面的中文是乱码的服务器上的文件publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)thro ...

  4. 解决mysql导出Excel中文乱码问题

    解决Excel导入mysql数据库时汉字乱码的问题 1.  前提:数据库采用的是UTF-8编码 2.  将Excel另存为csv格式,导入mysql后如果出现乱码,说明转换后的csv文件不是UTF-8 ...

  5. java写入excel乱码_java 导出excel中文乱码的问题

    最近在网上看到一个用java来操纵Excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下. 写一个javaBean,利用JExcelApi来动态生成exce ...

  6. 解决苹果(mac)浏览器safari导出excel中文名称乱码问题

    修改前 我们开发代码里有两种写法,safari导出excel中文乱码,英文是没问题的,但是但是导出中文的会乱码. 方式一: response.setHeader("content-Type& ...

  7. IIS+ASP+MySQL8.0+中文乱码解决方案(2019.7)

    困扰了我多天的ASP与MySQL操作中中文乱码问题终于得到了解决,真是很有成就感:多天以来,在探索使用ASP查询以及写入MySQL数据库中汉字的成功实现,我花费了大量的时间,几乎查看了网络上所有关于A ...

  8. JPS网页中文乱码解决方案

    JPS网页中文乱码解决方案 1 查看源文件页头 2 查看head标签 3 查看mysql数据库链接编码格式设置 4 查看数据库 4.1 修改字符编码 4.2 重新建表指定相应的编码 1 查看源文件页头 ...

  9. Springmvc使用hutool导出excel中文文件名乱码问题

    Springmvc使用hutool导出excel中文文件名乱码问题,原因是tomcat本身没有设置UTF-8,或者字符集问题. 未知原因很多.这些都可以通知对文件名使用URLEncoder.encod ...

  10. asp.net2.0导出pdf文件完美解决方案【月儿原创】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.28 PDF简介:PDF(P ...

最新文章

  1. C++ 函数模板特化导致的多重定义链接错误
  2. MIMIC 以太坊医疗项目开发(1) Express Web Server介绍
  3. 一次讲清UNICODE
  4. Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle
  5. oracle数据库、数据表的创建与管理 实验笔记二
  6. php cpp,PHPCPP安装以及hello world
  7. Eclipse使用之添加字体
  8. PHP整站迁移空间,Discuz! X2.5 整站搬家迁移升级教程
  9. 逻辑斯蒂回归模型为什么用sigmoid函数
  10. Integer类的缓存机制
  11. ea6700梅林固件
  12. 湘源控规计算土石方流程
  13. Oracle练习题及答案
  14. php编码小坑之调用新浪天气api和阿凡达天气api
  15. 超实用!XRD块状和粉末状样品的制备方法
  16. 如何设置用计算机程序打开方式,WPS安装后怎么设置为文档的默认打开方式的方法...
  17. 田颖- 「柴姐ye话」主笔,拉链互动副总裁 | 到「在行」来约见我
  18. zookeeper 启动失败,报错 “ZooKeeper JMX enabled by default”
  19. 分布式事务之基础理论(CAID、CAP与BASE)
  20. 光猫 DHCP服务器未响应,案例分享--光猫手工设置后死机的原因之一

热门文章

  1. leafletjs 热力图_leaflet.js自定义热力图效果实例
  2. 【备忘】Python编程实践视频教程+教材 27集 下载
  3. VSCode下载与安装
  4. 遥感数据下载网站整理
  5. STM32F103RCT6移植到STM32F103C8T6注意事项
  6. alisql mysql_AliSQL · 特性介绍 · 动态加字段
  7. Sonar 下载及结合maven使用
  8. abb变频器以太网适配器,ABB以太网适配器 Ethernet Adapter现货FENA-01
  9. oracle-jde操作界面,JDE项目系统基础培训.ppt
  10. Phpmailer指定多位收件人