Java 下载文件名乱码问题
介绍
这篇文章理论水平不算很高,但是希望能帮到你。
客户端下载文件名乱码
首先,我们先了解为什么客户端的下载文件名会出现乱码的问题:
- 不同的浏览器的解码方式不同: FireFox 使用的是 Base64 编码,其他大部分浏览器 使用的是 URL 编码。所以在将文件名传输回客户端的时候需要将显示在客户端的文件名进行编码。
需要将显示在客户端的文件名进行编码
这里有两种方法可以解决
- 通用方案:
filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
但是该方案不识别某些特殊的字符。所以不建议使用。
- 判断浏览器类型,使用浏览器识别的编码:
通过获取浏览器的 User-Agent 头判断浏览器类型,从而决定文件名的编 码。直接上代码
。
/**
* 更改回显文件乱码问题
* @param filename
* @param request
* @return
* @throws UnsupportedEncodingException
*/
public static String filenameEncoding(String filename,
HttpServletRequest request) throws UnsupportedEncodingException {
// 获取浏览器信息
String agent = request.getHeader("User-Agent");
// 判断浏览器类型
if (agent.contains("Firefox")) {
BASE64Encoder base = new BASE64Encoder();
filename = "=?utf-8?B?" + base.encode(filename.getBytes("utf-8"))
+ "?=";
} else if (agent.contains("MSIE")) {
filename = URLEncoder.encode(filename,"utf-8");
} else {
filename = URLEncoder.encode(filename,"utf-8");
}
return filename;
}
流程图
结语
这篇文章是本人通过视频学习和查询一些资料写的,如果文章如有错误,欢迎大神指正。