ASP.net网页导出Excel中文乱码解决方案
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中文乱码解决方案相关推荐
- php excelreader 中文,如何解决php excel reader导出excel中文乱码?
解决php excel reader导出excel中文乱码的方法:1.如果不使用dump函数,可以通过修改[_defaultEncoding]变量解决问题:2.如果使用dump函数导出excel,需要 ...
- javascript导出excel中文乱码
背景:html格式内容,但是以xls扩展名存放 症状:右键以记事本查看内容中文显示正常,但是用excel打开中文乱码 解决办法:往文件头加入BOM不可见字符 代码参考: //BOM在字符串拼接中使用\ ...
- java 导出excel 乱码_java 导出 Excel 中文乱码
这样字导出的文件里面的中文是乱码的服务器上的文件publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)thro ...
- 解决mysql导出Excel中文乱码问题
解决Excel导入mysql数据库时汉字乱码的问题 1. 前提:数据库采用的是UTF-8编码 2. 将Excel另存为csv格式,导入mysql后如果出现乱码,说明转换后的csv文件不是UTF-8 ...
- java写入excel乱码_java 导出excel中文乱码的问题
最近在网上看到一个用java来操纵Excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下. 写一个javaBean,利用JExcelApi来动态生成exce ...
- 解决苹果(mac)浏览器safari导出excel中文名称乱码问题
修改前 我们开发代码里有两种写法,safari导出excel中文乱码,英文是没问题的,但是但是导出中文的会乱码. 方式一: response.setHeader("content-Type& ...
- IIS+ASP+MySQL8.0+中文乱码解决方案(2019.7)
困扰了我多天的ASP与MySQL操作中中文乱码问题终于得到了解决,真是很有成就感:多天以来,在探索使用ASP查询以及写入MySQL数据库中汉字的成功实现,我花费了大量的时间,几乎查看了网络上所有关于A ...
- JPS网页中文乱码解决方案
JPS网页中文乱码解决方案 1 查看源文件页头 2 查看head标签 3 查看mysql数据库链接编码格式设置 4 查看数据库 4.1 修改字符编码 4.2 重新建表指定相应的编码 1 查看源文件页头 ...
- Springmvc使用hutool导出excel中文文件名乱码问题
Springmvc使用hutool导出excel中文文件名乱码问题,原因是tomcat本身没有设置UTF-8,或者字符集问题. 未知原因很多.这些都可以通知对文件名使用URLEncoder.encod ...
- asp.net2.0导出pdf文件完美解决方案【月儿原创】
asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.5.28 PDF简介:PDF(P ...
最新文章
- C++ 函数模板特化导致的多重定义链接错误
- MIMIC 以太坊医疗项目开发(1) Express Web Server介绍
- 一次讲清UNICODE
- Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle
- oracle数据库、数据表的创建与管理 实验笔记二
- php cpp,PHPCPP安装以及hello world
- Eclipse使用之添加字体
- PHP整站迁移空间,Discuz! X2.5 整站搬家迁移升级教程
- 逻辑斯蒂回归模型为什么用sigmoid函数
- Integer类的缓存机制
- ea6700梅林固件
- 湘源控规计算土石方流程
- Oracle练习题及答案
- php编码小坑之调用新浪天气api和阿凡达天气api
- 超实用!XRD块状和粉末状样品的制备方法
- 如何设置用计算机程序打开方式,WPS安装后怎么设置为文档的默认打开方式的方法...
- 田颖- 「柴姐ye话」主笔,拉链互动副总裁 | 到「在行」来约见我
- zookeeper 启动失败,报错 “ZooKeeper JMX enabled by default”
- 分布式事务之基础理论(CAID、CAP与BASE)
- 光猫 DHCP服务器未响应,案例分享--光猫手工设置后死机的原因之一
热门文章
- leafletjs 热力图_leaflet.js自定义热力图效果实例
- 【备忘】Python编程实践视频教程+教材 27集 下载
- VSCode下载与安装
- 遥感数据下载网站整理
- STM32F103RCT6移植到STM32F103C8T6注意事项
- alisql mysql_AliSQL · 特性介绍 · 动态加字段
- Sonar 下载及结合maven使用
- abb变频器以太网适配器,ABB以太网适配器 Ethernet Adapter现货FENA-01
- oracle-jde操作界面,JDE项目系统基础培训.ppt
- Phpmailer指定多位收件人