response.setContentType("application/octet-stream;charset=UTF-8");
fileName=java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
此时在ie下面点击文件下载的时候能够正确显示中文名称但是此时在firefox下面却显示1_%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6123.doc然后我又试了另一种方案

response.setContentType("application/octet-stream;charset=UTF-8");
fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
此时在ie下面下载的时候弹chu的文件名是乱码;而在firefox下面却正确显示1_中文文件XXX.doc。

我想要的是不管是ie还是firefox都正确显示1_中文XX.doc,不知道大家有没有遇到过类似的问题,解决之道是什么?
也许判断浏览器类型来进行不同的处理会是一种解决方案,但是这是一种个人觉得迫不得已的解决方案。

=================工具类=============================
package com.jub.jubweb1.JTool;

import javax.servlet.http.HttpServletRequest;

public  class  JToolWeb {
 
 //文件下载时文件名在ie和firefox下面表现不一致问题,乱码
 public static String processFileName(HttpServletRequest request,String fileNames){
  String codedfilename = null;
  try{
  String agent =request.getHeader("USER-AGENT");
  if(null != agent && -1 != agent.indexOf("MSIE")){//ie
  String prefix = fileNames.lastIndexOf(".")!=-1?fileNames.substring(0,fileNames.lastIndexOf(".")):fileNames;
  String extension = fileNames.lastIndexOf(".")!=-1?fileNames.substring(fileNames.lastIndexOf(".")):"";
  String name = java.net.URLEncoder.encode(fileNames, "UTF8"); 
  if(name.lastIndexOf("%0A")!=-1){
  name = name.substring(0,name.length()-3);
  }
  int limit = 150 - extension.length();//文件名超过 17 个中文字符,在 IE 下会有问题
  if (name.length() > limit) {
   name = java.net.URLEncoder.encode(prefix.substring(0, Math.min(prefix.length(), limit / 9)), "UTF-8"); 
   if(name.lastIndexOf("%0A")!=-1){
   name = name.substring(0,name.length()-3);
   }
  }else{
   return name;
  }
  codedfilename = name + extension;  
  } else if (null != agent && -1 != agent.indexOf("Mozilla")) {//火狐
  codedfilename = "=?UTF-8?B?"+(new String(org.apache.commons.codec.binary.Base64.encodeBase64(fileNames.getBytes("UTF-8"))))+"?=";
  }else {
  codedfilename = fileNames;
  }
  }catch(Exception e){
   e.printStackTrace();
  }
  return codedfilename;
 }
}

=================================jsp============================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8;" import="java.io.*,com.jub.jubweb1.JTool.*" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>下载</title>
</head>
<body>
<%
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
//关于文件下载时采用文件流输出的方式处理: 
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个; 
///response.reset();//可以加也可以不加  ,注意加了之后tomcate需要配置UTF-8否则乱码
String filePath=request.getSession().getServletContext().getRealPath("")+request.getParameter("path");
File file = new File(filePath);
if (!file.exists() || file.isDirectory()) {
 filePath=new String(filePath.getBytes("iso-8859-1"),"UTF-8");//防止tomcate编码不一
 file = new File(filePath);
 if (!file.exists() || file.isDirectory()){//二次验证
 %>
 <script type="text/javascript" charset="UTF-8">
  alert('抱歉,资源正在维护中,请稍后再试,如果有需要请联系我们的客服,谢谢!');
 </script>
 <%
 System.out.print(filePath);
 return;
 }
}
String fileName=filePath.substring(filePath.lastIndexOf("\\")+1,filePath.length());
System.out.print(fileName);
System.out.print(filePath);
//filename=new String(filename.getBytes("iso8859-1"),"gb2312");//使用超链接解决中文乱码
// 设置响应头和下载保存的文件名
response.setContentType("application/x-download"); 
//response.addHeader("Content-Disposition","attachment;filename=" +new String(fileName.getBytes("gb2312"),"iso8859-1"));//解决中文乱码
//response.addHeader("Content-Disposition","attachment;filename=" + java.net.URLEncoder.encode(fileName,"utf-8"));//解决中文乱码
String t=JToolWeb.processFileName(request,fileName);
response.addHeader("Content-Disposition","attachment;filename="+t);//解决中文乱码
System.out.println(t+"--------");
response.setContentLength((int)file.length());
java.io.OutputStream outp = null;
java.io.FileInputStream in = null; 
try 

outp = response.getOutputStream(); 
in = new FileInputStream(file); 
 
byte[] b = new byte[1024]; 
int i = 0; 
 
while((i = in.read(b)) > 0) 

outp.write(b, 0, i); 

// 
outp.flush(); 
//要加以下两句话,否则会报错 
//java.lang.IllegalStateException: getOutputStream() has already been called for //this response   
out.clear(); 
out = pageContext.pushBody(); 

catch(Exception e) 

System.out.println("Error!"); 
e.printStackTrace(); 

finally 

if(in != null) 

in.close(); 
in = null; 

//这里不能关闭   
//if(outp != null) 
//{ 
//outp.close(); 
//outp = null; 
//} 
}
%>
</body>
</html>

===========================jsp==================================
 <a href='javascript:subFrom("/jubweb1/down/down_stream.jsp","\\download\\erp\\行政管理手册.doc")'>下载</a>
 <!--下载使用的表单-->
  <form id="down_frm" name="down_frm" method="post" target="down_if"  style="display:none;">
  <input type="hidden" id="path" name="path"/>
  </form>
  <iframe  id="down_if" name="down_if" style="display:none;"></iframe><!--下载使用的iframe-->
  <script>
  
  function subFrom(url,param){
   $("#path").attr("value",param);
   $("#down_frm").attr("action",url);
   $("#down_frm").attr("method","post");
   $("#down_frm").submit();
     }
  </script>

JSP文件下载时文件名在ie和firefox下面文件名不一致极其超链接中文乱码的问题的改进的更多相关文章

  1. css中em小于1时chrome字体大小和firefox字体大小不一致的问题

    css中em设置为0.8,结果页面显示,chrome字体比firefox字体大了不少. chrome有默认字体大小,默认为12px.设置的字体大小小于12px时,也是按照12px来显示. firefo ...

  2. JSP中文乱码问题解决方法小结

    在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱 码问题以及解决方法. 1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要 ...

  3. jsp中文乱码解决办法

    一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供 ...

  4. jsp中文乱码六种情况---解决方案

    转 jsp中文乱码六种情况---解决方案 2016年10月22日 21:32:55 阅读数:10672 来源:http://blog.csdn.net/lovesummerforever/articl ...

  5. JSP文件下载及出现getOutputStream() has already been called for this response的解决方法

    JSP文件下载及出现getOutputStream() has already been called for this response的解决方法 http://iamin.blogdriver.c ...

  6. 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题

    #问题:客户端为ie或Firefox,服务端为asp.net时,下载文件名中包含中文汉字时,下载下来的文件的文件名是乱码: #解决方案: 示例代码:下载名称中带汉字的文件: public void P ...

  7. 解决 Firefox 下载文件名乱码扩展 ReDisposition

    作者 muzuiget  发布 2013-03-13 19:23  标签 redisposition Firefox 下载文件名乱码问题由来已久,偶然一两次还可以手动改名,批量下载时简直要亲命,最终我 ...

  8. C#导出Excel文件Firefox中文件名乱码

    首先说明下:我的解决方法不一定适用于其他遇到该问题的人,因为情况多种多样,适合我的方法不一定适合别人,就像我在遇到问题时查到别人的解决方案放到我的代码里却不管用,所以这个方法仅供参考 这两天做了一个导 ...

  9. jsp 文件下载

    有的时候一个模板的下载,这种简单的下载服务端已存在文件功能,就可以方便的通过jsp文件下载的方式来轻松实现. //jsp 页面 js /** * 导出角色 */ function exportRole ...

随机推荐

  1. mysql:mysql_query(): Unable to save result set

    解决方式 方式1: 原因:数据表索引损坏 方案:使用repair table 表名; 方式2: 原因:打开表的数据量太大,内存不够. 方案:配置my.ini 调整内存能解决

  2. 三 最简单的 AndEngine 程序框架

    package com.example.AndEngineExample; import org.anddev.andengine.engine.Engine;import org.anddev.an ...

  3. NodeJS学习笔记之MongoDB模块

    其中还有,nodejs远程连接mysql数据库 一,开篇分析 这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块). (1),简介 MongoDB是一个基于 ...

  4. http tcp联系区别

    术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到 ...

  5. beginUpdates和endUpdates

    我们在做UITableView的修改,删除,选择时,需要对UITableView进行一系列的动作操作. 这样,我们就会用到 [tableView beginUpdates]; if (newCount ...

  6. [转] C# 键盘中的按键对应的KeyValue

    原文C#KeyValue对应键盘 首先先看一下什么情况下需要对按键进行识别: KeyPress事件响应函数中,有KeyPressEventArgs, 对应于e.KeyChar; KeyDown事件响应 ...

  7. 处理 JSON null 和空数组及对象

    描述了对 JSON 数据中使用的 null 和空数组及对象的处理. JSON 数据具有 null 和空数组及对象的概念.此部分说明其中每个概念如何映射到 null 和未设置的数据对象概念. Null ...

  8. table应用之colspan与rowspan

    <table border=" borderColorDark="#66ff33"> <tr> <td rowspan=" ali ...

  9. selenium python (十)浏览器多窗口处理

    #!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip'#在测试过程中有时候会遇到出现多个浏览器窗口的情况,这时候我们可以通过窗口 ...

  10. mac 版本的 Google 网盘 走代理

    开启surge Mac版 设置系统代理 127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local 理论上可以使用cow来代 ...