Java文件下载中文名无法显示&乱码

  • Post author:
  • Post category:java


最近做了一个文件下载的需求,但是下载的文件名称如果是中文名,下载后出现名称无法显示的问题。查看资料后最终解决了。

原因:

因为用post方式提交的,所以用Servlet做的,设置的头信息里面需要对文件名称做处理,Header中只支持ASCII,传输的文件名必须是ASCII(

为什么只支持ASCII

)否则当出现中文名文件时,就出现异常。


Tips:


只是针对header!!!



代码如下:

public void downLoad(String fileName, String filePath,HttpServletResponse response) throws IOException {
		// 设置response参数,可以打开下载页面  application/msword
        response.reset();  
        // application/force-download
        // multipart/form-data
        // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
        response.setContentType("application/force-download");
        // 支持中文名称文件,需要对header进行单独设置,不然下载的文件名会出现乱码或者无法显示的情况
     	// String downloadFileName = new String(fileName .getBytes(), "ISO-8859-1");
        String downloadFileName = URLEncoder.encode(fileName,"UTF-8");
        // 设置响应头,控制浏览器下载该文件
        response.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName);
        //通过文件路径获得File对象
        File file = new File(filePath + fileName);
        FileInputStream inputStream = null;
        OutputStream out = null;
        try {   
            inputStream = new FileInputStream(file);   
            //通过response获取ServletOutputStream对象(out)   
            out = response.getOutputStream();   
            int length = 0;   
            byte[] buffer = new byte[1024];   
            while ((length = inputStream.read(buffer)) != -1){   
                //4.写到输出流(out)中   
                out.write(buffer,0,length);   
            }                               
  
        } catch (IOException e) {   
            e.printStackTrace();  
            log.info("file is error" + e.getMessage());
        } finally {
        	inputStream.close();   
        	out.flush(); 
            out.close();   
        }  	
        
    }

这两种方式都可以,

String downloadFileName = URLEncoder.encode(fileName,”UTF-8″);

String downloadFileName = new String(fileName .getBytes(), “ISO-8859-1”);

encode要用utf-8是因为:

ISO-8859-1为什么可以



版权声明:本文为yinghuacao_dong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。