不同浏览器上中文文件名的下载/导出乱码问题(Java)
来源:互联网 发布:php use找不到 编辑:程序博客网 时间:2024/05/21 17:31
最近在做项目,采用Spring Boot,下载文件/导出excel的中文文件名总是在主流浏览器上显示乱码。然后就去网上搜索相关解决办法,拿网上办法进行测试发现那些方法都已经不适用现在主流浏览器最新的版本了,于是经过自己琢磨、探索、尝试,最终得到了一个简洁、可实现的解决办法。现分享出来给大家,希望对你们有所帮助,如果对你有用,也希望你多多给予支持,在此先谢谢了。
下面就直接上代码:
/******************************************************************************
*如需转载请注明出处.
*****************************************************************************/
package com.zxm.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
* @Title: ContentDispositionUtils.java
* @Package com.zxm.util
* @Description:解决不同浏览器上中文文件名的下载乱码问题的工具类
* @author: zxm
* @date: 2017年12月4日下午1:46:55
* @version V1.0
* @company: xxx
*/
public class ContentDispositionUtils {
private static Logger logger = Logger.getLogger(ContentDispositionUtils.class);
/**
* @Title: contentDisposition
* @Description:解决不同浏览器上文件下载的中文名乱码问题
* @paramfilename导出/下载的文件的文件名
* @param request
* @param response
*/
publicstaticvoid contentDisposition(Stringfilename, StringuserAgent, HttpServletRequestrequest, HttpServletResponseresponse) {
try {
response.reset();
response.setCharacterEncoding("UTF-8");
String newFilename = URLEncoder.encode(filename,"UTF-8").replace("+"," ");
String rtn = "filename=\"" + newFilename + "\"";
if (userAgent !=null) {
userAgent = userAgent.toLowerCase();
if (userAgent.indexOf("edge") != -1) {
newFilename = URLEncoder.encode(filename,"UTF-8").replace("+"," ");
rtn = "filename=\"" + newFilename + "\"";
} else if (userAgent.indexOf("trident") != -1) {
rtn = "filename=\"" + newFilename + "\"";
} else {
rtn = "filename=\"" + new String(filename.getBytes("UTF-8"),"ISO8859-1") +"\"";
}
}
response.setHeader("Content-Disposition","attachment;" +rtn);
} catch (UnsupportedEncodingExceptione) {
logger.error("UnsupportedEncodingException.");
}
}
}
/******************************************************************************
// 调用方法去调用上述工具类示例,以导出excel为例:
OutputStream out = null;
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
String userAgent = request.getHeader("USER-AGENT");
String filename = "统计数据" + ".xlsx";
// 设置文件名在不同主流浏览器上的编码
ContentDispositionUtils.contentDisposition(filename,userAgent,request,response);
******************************************************************************/
此工具类是在以下浏览器版本上经测试没问题,其他低版本还需要自己亲自去测试:
主流浏览器
User-Agent
Microsoft Edge 20.10240.17146.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
IE 11
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Opera 49.0
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47
Safari 5.1.7
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47
Chrome 62.0.3202.94
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47
FireFox 57.0.1
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47
- 不同浏览器上中文文件名的下载/导出乱码问题(Java)
- 解决不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- Java strtus2文件下载不同浏览器文件名中文乱码处理
- 兼容不同浏览器上中文文件名的下载
- 解决不同浏览器上中文文件名的下载乱码问题php验证可行的测试过ie ff 和chrome的
- java下载文件文件名针对不同浏览器乱码,文件名中存在括号等乱码问题
- [浏览器]IE下载中文文件名乱码问题
- 不同浏览器下载文件名乱码
- java web 导出文件 文件名中文乱码问题的解决
- java 导出文件在不同的浏览器上名称乱码
- js获取对象属性个数
- 关于Interface的一些不知道的shiqing
- MySQL学习总结3
- JVM实用参数(六)-吞吐量收集器
- 《openSMILE用户手册》第2章 (2) openSMILE 第一次特征提取
- 不同浏览器上中文文件名的下载/导出乱码问题(Java)
- find -exec 与xargs 区别
- npm install出现"Unexpected end of JSON input while parsing near"错误解决方法
- 关于sqlserver的存储过程简单介绍
- 美洽发送离线消息到开发者服务器
- 中企动力联袂天姿做“时尚泳装”的弄潮儿
- 使用js模拟锚点功能的实现
- java 日历窗口小程序
- linux实现共享内存同步的四种方法一