方案一:URLEncoder 解决 IE 和 谷歌浏览器的附件中文名问题。
如果客户端浏览器是 IE 浏览器 或者 是谷歌浏览器。我们需要使用 URLEncoder 类先对中文名进行 UTF-8 的编码 操作。 因为 IE 浏览器和谷歌浏览器收到含有编码后的字符串后会以 UTF-8 字符集进行解码显示。- // 把中文名进行 UTF-8 编码操作。
- String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");
- // 然后把编码后的字符串设置到响应头中
- response.setHeader("Content-Disposition", str);
复制代码 方案二:BASE64 编解码解决火狐浏览器的附件中文名问题
如果客户端浏览器是火狐浏览器。 那么我们需要对中文名进行 BASE64 的编码操作。
因为火狐使用的是 BASE64 的编解码方式还原相应中的汉字。所以需要使用 BASE64Encoder 类进行编码操作。- // 使用下面的格式进行 BASE64 编码后
- String str = "attachment; fileName=" + "=?utf-8?B?"
- + new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) + "?=";
- // 设置到响应头中
- response.setHeader("Content-Disposition", str);
复制代码 方式三(推荐):通过判断哀求头中 User-Agent 这个哀求头携带过来的浏览器信息即可判断出是什么浏览器,来解决不同编解码方式。- String ua = request.getHeader("User-Agent");
- // 判断是否是火狐浏览器
- if (ua.contains("Firefox")) {
- // 使用下面的格式进行 BASE64 编码后
- String str = "attachment; fileName=" + "=?utf-8?B?"
- + new BASE64Encoder().encode("中文.jpg".getBytes("utf-8")) + "?=";
- // 设置到响应头中
- response.setHeader("Content-Disposition", str);
- } else {
- // 把中文名进行 UTF-8 编码操作。
- String str = "attachment; fileName=" + URLEncoder.encode("中文.jpg", "UTF-8");
- // 然后把编码后的字符串设置到响应头中
- response.setHeader("Content-Disposition", str);
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |