首页 >> 文档 >> JSP专题

jsp下载文件出现乱码问题的解决

发布日期:2008-07-10最近更新:2008-07-10来源:BHCODE作者:

用JSP实现文件下载功能时有时会出现文件乱码现象,下面通过实例代码来讲解如何去掉这些乱码

<%response.setContentType("APPLICATION/OCTET-STREAM"); %><jsp:directive.page import="java.io.File"/><%  //注意:“%><” 这些代码之间一定不能留空隙,否则下载文件乱码。  
 
 String sFileName = request.getParameter("FileName");  
 
 String sDownName = request.getParameter("DownName");  
 
 //得到服务器绝对路径  
 
 String pathString = (String)request.getSession().getServletContext().getRealPath(File.separator+"protect");  

<%response.setContentType("APPLICATION/OCTET-STREAM"); %><jsp:directive.page import="java.io.File"/><%  //注意:“%><” 这些代码之间一定不能留空隙,否则下载文件乱码。

 String sFileName = request.getParameter("FileName");

 String sDownName = request.getParameter("DownName");

 //得到服务器绝对路径

 String pathString = (String)request.getSession().getServletContext().getRealPath(File.separator+"protect");
 String sFilePath = "";  
 
 sFilePath = pathString+File.separator;  
 
 sDownName =new String(sDownName.getBytes("iso8859-1"),"gb2312");//关键是这句,否则会出现下载文件名称乱码  
 
 response.setContentType("application/x-msdownload");  
 
 response.setHeader("Content-disposition","attachment; filename="+new String(sDownName.getBytes("gb2312"),"iso8859-1"));  
 
// 打开指定文件的流信息   
 
 java.io.FileInputStream fileInputStream = null;  try{  
 
 
 
    fileInputStream = new java.io.FileInputStream(sFilePath+sFileName);  
 
    // 写出流信息   
 
    byte buffer[] = new byte[65000];  
 
    int i;   
 
    while( (i=fileInputStream.read(buffer, 0, 65000))!=-1 ) {   
 
      response.getOutputStream().write(buffer, 0, i);  
 
    }   
 
 
 
     out.flush();  
 
     out.close();  
 
 }catch(Exception ex){  
 
    ex.printStackTrace();  
 
 }finally{  
 
  if(fileInputStream!=null){    fileInputStream.close();  
 
  }  
 
 }  
 
%>   

 String sFilePath = "";

 sFilePath = pathString+File.separator;

 sDownName =new String(sDownName.getBytes("iso8859-1"),"gb2312");//关键是这句,否则会出现下载文件名称乱码

 response.setContentType("application/x-msdownload");

 response.setHeader("Content-disposition","attachment; filename="+new String(sDownName.getBytes("gb2312"),"iso8859-1"));

// 打开指定文件的流信息

 java.io.FileInputStream fileInputStream = null;  try{

 

   fileInputStream = new java.io.FileInputStream(sFilePath+sFileName);

   // 写出流信息

   byte buffer[] = new byte[65000];

   int i;

   while( (i=fileInputStream.read(buffer, 0, 65000))!=-1 ) {

    response.getOutputStream().write(buffer, 0, i);

   }

 

   out.flush();

   out.close();

 }catch(Exception ex){

   ex.printStackTrace();

 }finally{

  if(fileInputStream!=null){ fileInputStream.close();

  }

 }

%> 

本周推荐
MORE
热点关注
MORE