记一次使用JavaIO下载 浏览器(火狐)显示文件名乱码问题

 应业务需求,写一个从云端服务器下载一个PDF文档

码毕后,开测  下载页面不显示完整文件名(中文) 只显示英文数字

遂调编码  GBK→UTF-8     UTF-8→GBK   ISO8859。。。各种转..无济于事

最后火狐还是不显示  谷歌 IE 正常  经查阅 火狐是BASE64位....坑啊

解决方法:判断一下就可以了

//获取请求头中的User-Agent
    String agent = request.getHeader("User-Agent");
    // 根据不同的客户端进行不同的编码
    String filenameEncoder = "";
	if (agent.contains("MSIE")) {
		// IE浏览器
	filenameEncoder = URLEncoder.encode(file.getName(), "utf-8");
	filenameEncoder = filenameEncoder.replace("+", " ");
		} else if (agent.contains("Firefox")) {
	// 火狐浏览器
	BASE64Encoder base64Encoder = new BASE64Encoder();
        filenameEncoder = "=?utf-8?B?" +
        base64Encoder.encode(file.getName().getBytes("utf-8")) + "?="; 
		} else {
		// 其它浏览器
        filenameEncoder = URLEncoder.encode(file.getName(), "utf-8");
		}
 response.addHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);
 response.setContentType("application/pdf;charset=UTF-8");

完美解决,根据自身实际情况进行调整就可以了

猜你喜欢

转载自blog.csdn.net/bn_Seed/article/details/81507650
今日推荐