.netCore中Response.WriteAsync()输出乱码

在.NET Core项目中,使用Response.WriteAsync()导出Excel时遇到中文乱码问题。传统的解决方法在Core中无效。通过引入System.Text.Encoding.CodePages包,并在Startup中设置响应编码为GB2312,可以临时解决乱码问题。但这种方式在Excel显示上可能存在问题。目前寻求不依赖第三方插件的优化方案。

1.输出中文,导出到excel的代码(System.Web.HttpContext 自己注入

            string rt = @"
		            <table border='1' width='100%' style='color : green'>
		            <tr height='20' align='center' style='font-weight : bold ' ><td>哈哈</td><td>三个字</td><td>浏览数(pv)</td><td>访客数(uv)</td><td>已过数(已经缴费)</td><td>收益</td></tr>
		            <tr height='20' align='center' ><td>a</td><td>公开</td><td>0</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>f</td><td>公开</td><td>3</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>g</td><td>公开</td><td>2</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>h</td><td>公开</td><td>45</td><td>1</td><td>0</td><td>0.00</td></tr>
		            </ table >";
            string fileName = System.Web.HttpUtility.UrlPathEncode("视讯.xls");
            System.Web.HttpContext.Current.Response.Headers.Add("Content-Type", "application/ms-excel; charset=UTF-8");
            System.Web.HttpContext.Current.Response.Headers.Add("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            System.Web.HttpContext.Current.Response.WriteAsync(rt);

2.问题:
在这里插入图片描述
百度了很多内容大部分都是针对Core控制台输出中文乱码的解决方案

因为在Core中无法使用
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding(“GB2312”);
很多表头都只能使用, System.Web.HttpContext.Current.Response.Headers.Add(),来加上

暂时解决方法

1.先在NuGet中下载 System.Text.Encoding.CodePages包

2.在Startup中或者main方法中,在这儿 我就放在 Startup 中了

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//注册字体GB2312  来源于:System.Text.Encoding.CodePages
 }

3.在上述方法中加上

            string rt = @"
		            <table border='1' width='100%' style='color : green'>
		            <tr height='20' align='center' style='font-weight : bold ' ><td>哈哈</td><td>三个字</td><td>浏览数(pv)</td><td>访客数(uv)</td><td>已过数(已经缴费)</td><td>收益</td></tr>
		            <tr height='20' align='center' ><td>a</td><td>公开</td><td>0</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>f</td><td>公开</td><td>3</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>g</td><td>公开</td><td>2</td><td>1</td><td>0</td><td>0.00</td></tr>
		            <tr height='20' align='center' ><td>h</td><td>公开</td><td>45</td><td>1</td><td>0</td><td>0.00</td></tr>
		            </ table >";
            string fileName = System.Web.HttpUtility.UrlPathEncode("视讯.xls");
            System.Web.HttpContext.Current.Response.Headers.Add("Content-Type", "application/ms-excel; charset=UTF-8");
            System.Web.HttpContext.Current.Response.Headers.Add("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            System.Web.HttpContext.Current.Response.WriteAsync(Encoding.GetEncoding("GB2312").ToString());
            System.Web.HttpContext.Current.Response.WriteAsync(rt);

System.Web.HttpContext.Current.Response.WriteAsync(Encoding.GetEncoding(“GB2312”).ToString());

4.结果
在这里插入图片描述

暂时之能这样了。
System.Text.DBCSCodePageEncoding 显示在excel文件很难看,如更改了列标题的字数也会乱码。

求教没有其他更好的方法呢(不使用第三方导出插件,就用输出的这种)?

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值