C#导出Excel文件Firefox中文件名乱码
首先说明下:我的解决方法不一定适用于其他遇到该问题的人,因为情况多种多样,适合我的方法不一定适合别人,就像我在遇到问题时查到别人的解决方案放到我的代码里却不管用,所以这个方法仅供参考
这两天做了一个导出数据到Excel功能,用NPOI导出,但是在最后步骤出了一点小岔子,导出文件的名称在火狐里面显示的是乱码,在谷歌和IE里面均正常,这尼玛~~~瞬间想把火狐给千刀万剐了有木有!!当然光生气是没什么用的,问题总是要解决的。虽然用户基本不用火狐浏览网站,但是留这么一个问题在也不合适是不是,所以就找原因,csdn上一位博主写了一个解决办法(传送门),但是我用过后发现不管用,不知道是不是我的情况特殊,也有在百度上看到火狐官方的回答是让设置文件编码,不过也没用,后来在百度知道上看到另一个大神说不需要编码,于是试了一下,发现火狐是OK了,但是谷歌和IE却抽了,无奈只好做了一个判断,对火狐特殊处理,具体代码如下:
//这里判断使用的浏览器是否为Firefox,Firefox导出文件时不需要对文件名显示编码,编码后文件名会乱码
//但是IE和Google需要编码才能保持文件名正常
if (baseContext.Request.ServerVariables["http_user_agent"].ToString().IndexOf("Firefox") != -)
{
baseContext.Response.AddHeader("Content-Disposition", "attachment;filename="
+ sFileName);
}
else
{
baseContext.Response.AddHeader("Content-Disposition", "attachment;filename="
+ System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8));
}
判断浏览器分开处理
遇到同样问题的朋友可以试试
~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~
解决这个问题之后,满心欢喜,但是我没想到后面还有更大的坑在等着我去跳,火狐里面中文倒是可以了,由于我们网站是多语系,有简繁英越四个语言,导出英文和越文时,字之间的空格都显示成了+号,并且在IE和谷歌里面越语的时候也会出啊先瞬间就傻眼了,这是什么玩意儿?无奈只好又查资料,同事帮我找到一个解决方案,具体地址在这里,原因是经过HttpUtility.UrlEncode方法加密过文件名后该方法将空格替换成了+号,用%20替换掉就可以正常显示了,但是这个方法在IE和谷歌里面可以解决问题,在火狐里面仍然无效,用%20替换+后输出的就是%20,并不会显示为空格,真心是给火狐跪了啊,各种纠结,最后还是那个同事帮我找到一篇一个Java工程师写的解决方案,具体地址在这里,于是抱着试试看的态度用C#试了下,结果完美解决所有语言的乱码问题,唉,真是被火狐搞死了,到此这个功能总算完善了,最后还是把具体的代码发出来吧
string sFileName = "XXXXXX.xls";
if (baseContext.Request.ServerVariables["http_user_agent"].ToString().IndexOf("Firefox") != -1)
{
sFileName = "=?UTF-8?B?" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sFileName)) + "?=";
}
else
{
sFileName = System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8);
sFileName = sFileName.Replace("+", "%20");
}
baseContext.Response.AddHeader("Content-Disposition", "attachment;filename=" + sFileName);
baseContext.Response.AddHeader("Content-Length", ms.Length.ToString());
baseContext.Response.AddHeader("Content-Transfer-Encoding", "binary");
baseContext.Response.ContentType = "application/octet-stream;charset=utf-8";
baseContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
baseContext.Response.BinaryWrite(ms.ToArray());
C#导出Excel文件Firefox中文件名乱码的更多相关文章
- Java web中不同浏览器间导出Excel文件名称乱码问题解决方案
问题描述: 对于不同浏览器存在对中文编码格式问题,从而在导出Excel文件时,中文文件名出现乱码的情况,即在程序中给要导出的文件指定一个中文名字时,在浏览器上出现的下载框中的文件名出现了乱码,解决如下 ...
- 前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
在之前的文章中,我们为大家分别详细介绍了在JavaScript.React中使用SpreadJS导入和导出Excel文件的方法,作为带给广大前端开发者的"三部曲",本文我们将为大家 ...
- PHP导出excel文件的几种方式
PHP导出excel文件的几种方式 先说说动态生成的内容当作文件来下载的方法: 1.通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来 ...
- 转:PHP导出excel文件的几种方式
PHP导出excel文件的几种方式 文章来源:http://www.cnblogs.com/fredshare/archive/2012/10/29/2744243.html 先说说动态生成的内容当作 ...
- 如何使用JavaScript导入和导出Excel文件
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. JavaScript是一个涵盖多种框架.直译式.可以轻松自定义客户端的脚本 ...
- 基于Vue + axios + WebApi + NPOI导出Excel文件
一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页 ...
- ExtJS Grid导出excel文件
ExtJS Grid导出excel文件, 需下载POI:链接:http://pan.baidu.com/s/1i3lkPhF 密码:rqbg 1.将Grid表格数据连同表格列名传到后台 2.后台导出e ...
- PHP从数据库导出EXCEL文件
参考博客链接:http://www.cnblogs.com/huangcong/p/3687665.html 我的程序代码 原生导出Excel文件 <?phpheader('Content-ty ...
- jxl导出Excel文件
一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; im ...
随机推荐
- chmod / chown /chattr
显示了七列信息,从左至右依次为:权限.文件数.归属用户.归属群组.文件大小.创建日期.文件名称 d :第一位表示文件类型 d 文件夹 - 普通文件 l 链接 b 块设备文件 p 管道文件 c 字符设备 ...
- 02.制作一个自己的 Java 编辑器
难度中等,适合 Java 基础扎实,对 Java 核心 API 有所熟悉的同学学习 No1.制作GUI界面 一.实验介绍 1.1 实验内容 本节课程的主要内容是准备开发环境,建立项目并完成 GUI 界 ...
- Linux+Apache+Mysql+PHP优化技巧
LAMP 平台由四个组件组成,呈分层结构.每一层都提供了整个软件栈的一个关键部分:Linux.Apache.MySQL.PHP. LAMP这个词的由来最早始于德国杂志“c't Magazine”,Mi ...
- Apache和nginx 域名配置
apache配置 一.hosts配置: 1.用编辑器打开hosts文件,位置:C:\Windows\System32\drivers\etc目录下 2.在hosts文件里添加自己的域名配置,配置规则如 ...
- asp.net core跨平台开发从入门到实战文摘
第1章 .NET Core 第2章 dotnet命令 第3章 VS Code安装及介绍 第4章 VS2015开发.NET Core 第5章 ASP.NET Core 第6章 EF Core 第7章 A ...
- boost--function
1.简介 function是一个模板类,它就像一个包装了函数指针或函数对象的容器(只有一个元素).可以把它想象成一个泛化的函数指针,而且他非常适合代替函数指针,存储用于回调的函数.如下定义了一个能够容 ...
- java常用设计模式十:模板模式
一.定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如果上面的话不好理解,请看下面的例子 二.示例 1)定义一个模 ...
- Java编程从头开始---老妪能解
思想导向: 今天想要分享的是最基础的东西就是如何写一个简单的代码,很多人都是小白,需要的其实并不是很高端的理论,框架和思维模式啊,设计方法啊,这些对于一个新人来说实在是好高骛远,说的那么高端,结果要学 ...
- ubuntu设置IP地址、网关的方法
打开terminal(用Ctrl+Alt+T打开) 1. 输入ifconfig 打印如下: enp1s0 Link encap:Ethernet HWaddr 6c:4b:90:0b:53: ...
- Day1-Python基础--数据类型
距离上次更新,已经一月有余.说明学习状态不好,且滞后严重.第二模块也滞后5周之多,可能学习方法不对,有点凌乱,导致写作业时思路还是打不开,再一个是练习的太少了吧,以后得多挤挤时间来了.目前到了这个年纪 ...