http://community.csdn.net/Expert/topic/4623/4623584.xml?temp=.9276392上边的帖子分也算,呵呵. MailDB mdb = new MailDB();
   
   Vector v = mdb.showone();
   
   System.out.println("1===="+v.elementAt(0));
   System.out.println("2===="+v.elementAt(1));


  String filepath = servlet.getServletContext().getRealPath("/upload");
  
  String  filename  =  (String)v.elementAt(1);      
         
          
//        设置响应头和下载保存的文件名    
         // response.setContentType("APPLICATION/OCTET-STREAM");   
          
        
          
          response.setHeader("Content-Disposition","attachment;  filename=\""  +  (String)v.elementAt(0)  +  "\"");  
          
          response.setHeader("Connection",  "close");  
          response.setHeader("Content-Type",  "application/octet-stream");  
          
          
          File  f=new  File(filepath,filename);  
          java.io.FileInputStream  fileIn  =    
            new  java.io.FileInputStream(f);    
                
          //  写出流信息    
           int  i;    
          ServletOutputStream  sos  =  response.getOutputStream();  
          int  i_length  =  fileIn.available();  
          byte  buf_1[]=new  byte[i_length];  
          while(i_length>0){  
                                    fileIn.read(buf_1);  
                                            sos.write(buf_1);  
                                            i_length=fileIn.available();  
            }  
          sos.close();  
          fileIn.close();    上边的代码是下载文件操作,暂时可以正常运行。v.elementAt(1)是目录下实际的文件名。现在,我想在下载的时候对它进行重命名为v.elementAt(0)。为什么一下载就出乱码。而换成v.elementAt(1)就可以正常啦。可是那没重命名。需求是必须要重新命名,具体该如何实现,请高人指点下。

解决方案 »

  1.   

    response.setHeader("Content-Disposition","attachment;  filename=\""  +  toUtf8String((String)v.elementAt(0))  +  "\"");  
    public static String toUtf8String(String s) {
            StringBuffer sb = new StringBuffer();
            for (int i=0;i<s.length();i++) {
                char c = s.charAt(i);
                if (c >= 0 && c <= 255) {
                sb.append(c);
                } else {
                byte[] b;
                try {
                    b = Character.toString(c).getBytes("utf-8");
                } catch (Exception ex) {
                    System.out.println(ex);
                    b = new byte[0];
                }
                for (int j = 0; j < b.length; j++) {
                    int k = b[j];
                    if (k < 0) k += 256;
                    sb.append("%" + Integer.toHexString(k).
                    toUpperCase());
                }
                }
            }
            return sb.toString();
       }防止乱码出现,这样就应该好了.