java实现浏览器下载附件时文件名中文乱码解决方案

打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表