问题描述
小弟在做一个文件下载的功能时,出现了文件名乱码问题,请各位给分析下。我页面上采用的是UTF-81.界面采用的是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 blocke.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,所以会产生乱码