小弟在做一个文件下载的功能时,出现了文件名乱码问题,请各位给分析下。
我页面上采用的是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