解决下载文件时中文乱码问题

来源:互联网 发布:mac 六国 重新启动 编辑:程序博客网 时间:2024/06/10 02:37

1.通过User-Agent请求头判断当前浏览器类型

下面是各大浏览器的User-Agent详细信息,根据其中的特殊字符串进行判断浏览器类型

- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
* Chrome:User-Agen中含有"Chrome"字符串
*解决方式:filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");//完美解决

- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
* IE浏览器:User-Agent中含有"Trident"字符串

*解决方式:

filename = URLEncoder.encode(filename, "UTF-8");//有空格会被解码为 “+” 问题

filename = filename.replace("+", "%20");                //解决空格会被解码为 “+”问题

- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
* Firefox:User-Agent中含有"Firefox"字符串
* 解决方式:filename = "=?utf-8?b?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";

- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
* Edge:User-Agent中含有"Edge"字符串

*解决方式: 

filename = URLEncoder.encode(filename, "UTF-8");//有空格会被解码为 “+” 问题

filename = filename.replace("+", "%20");                //解决空格会被解码为 “+”问题
* 通用的解决方式,但是还是会存在部分中文乱码问题:
filename = new String(filename.getBytes("gbk"),"ISO8859-1");

getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
new String(byte[], decode):使用指定的编码decode来将byte[]解析成字符串.

2.模板代码:
String userAgent = request.getHeader("User-Agent");if ("Edge".contains(userAgent)) {System.out.println("Edge");filename = URLEncoder.encode(filename, "UTF-8");filename = filename.replace("+", "%20");}else if ("Chrome".contains(userAgent)) {System.out.println("Chrome");filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");}else if ("Firefox".contains(userAgent)) {System.out.println("Firefox");filename = "=?utf-8?b?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";}else if ("Trident".contains(userAgent)) {System.out.println("IE");filename = URLEncoder.encode(filename, "UTF-8");filename = filename.replace("+", "%20");}else {System.out.println("Others"); filename = new String(filename.getBytes("gbk"),"ISO8859-1");}

阅读全文
0 0
原创粉丝点击