第一种解决方案:
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {//IE内核
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {//非IE内核
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
}
fileName += ".xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8");
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName)); // 文件名外的双引号处理firefox的空格截断问题
第二种解决方案:
if(userAgent != null && userAgent.toLowerCase().indexOf("firefox") > 0){
fileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?=";
} else{
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
}
fileName += ".xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);