小弟在做一个文件下载的功能时,出现了文件名乱码问题,请各位给分析下。
我页面上采用的是UTF-8
1.界面采用的是UTF-8编码方式,界面简易代码:
<%@ page contentType="text/html;charset=UTF-8"%> <%@ taglib prefix="ww" uri="/webwork"%> <html> <head> <title><%=str%></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <a href="#" onclick="javascript:window.open(encodeURI('/fileDownload/loadAction.do?fileName=D:/新建文本文档.txt'))">下载</a> </body> </html>
2.在Action中,我用前台传进来的fileName新建一个File
fileName = request.getParameter("fileName"); File file = new File(fileName); if(!file.exists())throw new IOException("文件不存在!"); OutputStream outputStream = null; FileInputStream fileIn = null; HttpServletResponse response = ServletActionContext.getResponse(); try { response.setContentType("application;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(file.getName().getBytes("GBK"),"ISO-8859-1")); outputStream = response.getOutputStream(); fileIn = new FileInputStream(fileName); FileCopyUtils.copy(fileIn, outputStream); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(outputStream!=null)outputStream.close(); if(fileIn!=null)fileIn.close(); }
在response.setHeader的时候,我如果不把文件编码给转一下,就会产生乱码,乱码为【苞_嘽.txt】,对应【新建文本文档.txt】,我把文件名给转了下编码,下载就不是乱码了
求解释,多谢了。
备注:JSP编码为UTF-8,Java文件编码为UTF-8,JVM启动参数编码为GBK
你界面编码为UTF-8,在action中response.setContentType("application;charset=UTF-8");这段代码只是设置文件内容的编码格式,而对文件名的编码没有设置,默认为ISO-8859-1,所以会产生乱码
下载码来一个
下载码来一个