今天在使用poi导出excel表格过程中,导出excel文件,除了火狐浏览器(Firefox)中文乱码外,其他都正常,经过查找,得出以下原因:
文件名存在http header中的filename,Content-Disposition: attachment; filename=FILENAME,该filename参数可用于为浏览器下载资源的文件的名称提供建议。但是,RFC 2183中声明文件名只能使用US-ASCII字符,目前大多数流行的Web浏览器似乎允许非US-ASCII字符(由于缺乏标准)在编码方案和文件名的字符集规范上不同意。那么问题是,如果文件名“naïvefile”(没有引号和第三个字母是U + 00EF)需要编码到Content-Disposition头文件中。
按照 rfc231 , Content-Disposition 应该按照如下格式设置:
"Content-Disposition","attachment;filename*=utf-8'zh_cn'文件名.xx"
只要严格按照标准设置以后,自然在各种浏览器下都会正常运行。
解决方案:
1.根据浏览器不同,若是firefox,则严格按照标准处理
String codedFileName = "导出文件名.xls";
String agent = request.getHeader("USER-AGENT");
if(agent != null && agent.toLowerCase().indexOf("firefox") > 0)
{
codedFileName = "=?UTF-8?B?" + (new String(Base64Utils.encodeToString(codedFileName.getBytes("UTF-8")))) + "?=";
} else {
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF-8");
}
response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName);
2.统一使用filename*=utf-8’zh_cn’
文件名.xx的标准(简洁)
String codedFileName = "导出文件名.xls";
response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + codedFileName);
建议使用后者。
参考文章:https://blog.csdn.net/bylhjcsmmd/article/details/78284736 ;
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了