DrewJhung's Blog

导出文件的文件名乱码----解决方法

Java中导出文件的文件名乱码解决方法

直接上代码~_~

  1. 解决的通用方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private static final CONTENT_TYPE="application/vnd.ms-excel";
public void export(HttpServletRequest request, HttpServletResponse response){
String fileName = "中文文件名";
final String userAgent = request.getHeader("USER-AGENT");
response.setContentType(CONTENT_TYPE);
String encodedFileName = encodeFileName(fileName);
// 下载文件
InputStream in = 你的输入流对象;
FileCopyUtils.copy(in, response.getOutputStream());
}
// 对文件名按照不同的浏览器做相应的URL编码
public String encodeFileName(String userAgent, String fileName){
try{
if(StringUtils.contains(userAgent, "MSIE")){ // IE浏览器
fileName = URLEncoder.encode(fileName, "UTF-8");
} else if(StringUtils.contains(userAgent, "Mozilla")){ // google、火狐
fileName = URLEncoder.encode(fileName, "ISO8859-1")
} else { // 其他的浏览器
fileName = URLEncoder.encode(fileName, "UTF-8");
}
return fileName;
} catch (UnsupportedEncodingException e){
e.printStackTrace();
return fileName;
}
}
  1. 你也可以把上面的方法encodeFileName(String fileName)换个写法:
1
2
3
4
5
6
7
8
9
public String encodeFileName(String userAgent, String fileName){
try{
fileName = StringUtils.contains(userAgent, "Mozilla") ? URLEncoder.encode(fileName, "ISO8859-1") : URLEncoder.encode(fileName, "UTF-8");
return fileName;
} catch (UnsupportedEncodingException e){
e.printStackTrace();
return fileName;
}
}

Reference

参考资料:
感谢CSDN的大神们!