关于Firefox火狐及其他浏览器文件下载中文乱码问题的解决

1.工具类DownLoadUtils如下:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


public class DownLoadUtils {

    public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
        if (agent.contains("MSIE")) {
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } /*else if (agent.contains("Firefox")) {
            // 火狐浏览器

            filename = "=?UTF-8?B?" + (new String(Base64Utils.encodeToString(filename.getBytes("UTF-8")))) + "?=";
        } */else {
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}

2.文件下载DownloadServlet如下:

		//1.获取请求参数,文件名称
        String filename = request.getParameter("filename");
        
        //2.获取请求头中的agent值
		String agent = request.getHeader("user-agent");
		
		//3.利用工具类将filename转换成不同浏览器兼容形式
        filename = DownLoadUtils.getFileName(agent, filename);
        
        //4.设置文件下载响应头
        //注意:火狐有点特殊,没有在工具类中进行filename的转换,而是放在了这儿↓
        if(agent.contains("Firefox")){
            response.setHeader("content-disposition", "attachment;filename*=utf-8'zh_cn'" + filename);
        } else {
            response.setHeader("content-disposition", "attachment;filename=" + filename);
        }
  1. 参考如下:
    https://blog.csdn.net/bylhjcsmmd/article/details/78284736
发布了2 篇原创文章 · 获赞 2 · 访问量 45

猜你喜欢

转载自blog.csdn.net/lilinchao97/article/details/104091131