我的downinfo.jsp的页面代码如下:java.io.BufferedInputStream bis=null;
   java.io.BufferedOutputStream  bos=null; try{     String filename=request.getParameter("filename");
  response.setContentType("application/x-msdownload");
 

  filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
 
 
  //response.setContentType("application/vnd.ms-excel");
  response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
  //response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("GBK"),"iso8859-1"));
  //response.setHeader("Content-disposition","attachment; filename="+filename);
  bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("upload/" + filename)));
  bos=new java.io.BufferedOutputStream(response.getOutputStream());
  byte[] buff = new byte[2048];
  int bytesRead;
  while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
   bos.write(buff,0,bytesRead);
  }
 
  bis.close();
  bos.close();


    
    }
    catch(Exception e)
    {
     e.printStackTrace();
    
    }
    finally
    {
     out.clear();
out = pageContext.pushBody();
    }现在的问题是有些中文文件名不会出现乱码,有些中文文件名会出乱码。比如:表格.txt不会出乱码,表.txt就会出乱码。
我的页面统一编码为utf-8.
    

解决方案 »

  1.   

    response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));这怎么有转到GB2312去了不是UTF-8吗 
      

  2.   

    我试过了这句话是没问题的。现在的问题主要就是有的中文文件名会乱码,有些不会。比如表格.txt,表.txt
    不知道是什么原因。。
      

  3.   

    需要两次转码
    filename=URLDecoder.decode(filename,"iso-8859-1");
    filename = new String(filename.getBytes("iso-8859-1"),"UTF-8");
      

  4.   

     记得 需要下载个JAR包 就可以解决了!
      

  5.   

    filename=new String(filename.getBytes("iso8859-1"),"UTF-8");这是根本要需要转的.
      

  6.   

    我调试代码的时候 在 
    filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
    执行这句代码的时候,不同的中文文件名有的可以正常显示,可是有的确实乱码。
    上面的方法也试过了,是不行。
    大家也可以帮我改下上面的代码,到底是哪出问题了。如果是编码问题的话,不可能有的时候可以的有的时候又不行的吧。
      

  7.   

    发现个问题,当  String filename=request.getParameter("filename");
    此时filename是乱码,当这个乱码中含有?的话,就会转码失败就是不能转成正常的中文。如果filename中不含?的话,就会正常。
      

  8.   

    如果用的是tomcat服务器 就把server.xml 里的字符集 设成UTF-8 
      

  9.   

    更改Eclipse默认编码!请坐如下操作!
    Window->Preferences->General->Workspace->Text file encoding这么以后,你应该就不用转码了,直接取就行了!
      

  10.   


    更改Eclipse默认编码!将其改为UFT-8即可。
      

  11.   

    项目编码已经是utf-8了也不行
      

  12.   


    如果已经是utf-8,那你应该就不用再转码了!
    你把转码的代码去掉试试!
      

  13.   

    看看这个有用没?http://blog.csdn.net/Jerry_BJ/archive/2010/07/07/5717926.aspx
      

  14.   


    new String(filename.getBytes("GBK"),"ISO8859_1")这么着不行?我这就是用这个。的。。
      

  15.   


     response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
    这一句是用来捣乱的,去掉,如果你的页面是UTF-8的,我做了两处修改其一:在服务器容器中设置URIEncoding="UTF-8",例如tomcat的server.xml
     <Connector
    port="8080"               maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
    其二,在配置下载类的地方添加
    <param name="contentType">application/octet-stream;charset=ISO8859-1</param>   
    然后就ok了
      

  16.   

    我觉得没有必要去设那么多东西 
    我原来也遇到过下载的时候会乱码 
    reqest获取的时候就是乱码?  你要知道怎么会出现乱码 
    要不怎么转也不对。。
      

  17.   

    tomcat配置文件中的那个xml改了没
      

  18.   

    filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
     response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
    这个有问题吧。
      

  19.   

    filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
     response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
    这个有问题吧。
      

  20.   

    终于解决了,按照22楼的想法。先把链接的参数转化格式即可。
    代码:
    var filename = encodeURI(str);

    var attr = '<a href="admin/downInfo.jsp?filename='+filename+'">'+str+'</a>'+'&nbsp;&nbsp;';downInfo.jsp代码:
    <%
       
        java.io.BufferedInputStream bis=null;
       java.io.BufferedOutputStream  bos=null; try{     String filename=request.getParameter("filename");
      response.setContentType("application/x-msdownload");
     

      filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
     
     
     
      response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
     
      bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("upload/" + filename)));
      bos=new java.io.BufferedOutputStream(response.getOutputStream());
      byte[] buff = new byte[2048];
      int bytesRead;
      while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
       bos.write(buff,0,bytesRead);
      }
     
      bis.close();
      bos.close();


        
        }
        catch(Exception e)
        {
         e.printStackTrace();
        
        }
        finally
        {
         out.clear();
    out = pageContext.pushBody();
        }
        
      
      
    %>
    页面的编码均为utf-8
      

  21.   

    filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
     response.setHeader("Content-disposition","attachment; filename="+java.net.URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"));