java下载文件名乱码的解决方法

要分浏览器处理,IE浏览器和其他浏览器(谷歌,火狐等等)。

  HttpServletResponse response = this.getResponse();
  HttpServletRequest request = this.getRequest();
  response.reset();
  response.setContentType("application/x-msdownload");
  response.setHeader("Content-Type", "application/octet-stream");

String agent = request.getHeader("User-Agent").toUpperCase(); //获得浏览器信息并转换为大写
if (agent.indexOf("MSIE") > 0 || (agent.indexOf("GECKO")>0 && agent.indexOf("RV:11")>0)) {  //IE浏览器和Edge浏览器
  fileName = URLEncoder.encode(fileName, "UTF-8");  
} else {  //其他浏览器
   fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");  
}
response.setHeader("content-disposition", "attachment;filename=" + fileName);
public static void main(String[] args) {
             String agent=request.getHeader("User-Agent").toLowerCase();
             System.out.println(agent);
             System.out.println("浏览器版本:"+getBrowserName(agent));
 }
 
/**
  * 获取浏览器版本信息
  * @Title: getBrowserName
  * @data:2015-1-12下午05:08:49
  * @author:wolf
  *
  * @param agent
  * @return
  */
public String getBrowserName(String agent) {
  if(agent.indexOf("msie 7")>0){
   return "ie7";
  }else if(agent.indexOf("msie 8")>0){
   return "ie8";
  }else if(agent.indexOf("msie 9")>0){
   return "ie9";
  }else if(agent.indexOf("msie 10")>0){
   return "ie10";
  }else if(agent.indexOf("msie")>0){
   return "ie";
  }else if(agent.indexOf("opera")>0){
   return "opera";
  }else if(agent.indexOf("opera")>0){
   return "opera";
  }else if(agent.indexOf("firefox")>0){
   return "firefox";
  }else if(agent.indexOf("webkit")>0){
   return "webkit";
  }else if(agent.indexOf("gecko")>0 && agent.indexOf("rv:11")>0){
   return "ie11";
  }else{
   return "Others";
  }
 }

 

posted @ 2017-11-24 16:05  nullyb  阅读(12142)  评论(0编辑  收藏  举报