下载文件的编码问题

小弟在做一个文件下载的功能时,出现了文件名乱码问题,请各位给分析下。

我页面上采用的是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,所以会产生乱码

下载码来一个

下载码来一个