解决浏览器下载中文乱码和URL中文乱码问题

  • 下载中文乱码问题
  • URL路径中含有中文处理方式:

下载中文乱码问题

中文乱码是个让人头痛的问题,这里整理针对下载时,中文乱码问题,下面是Java对应的实现,均已测试OK

 response.reset();response.setContentType("application/octet-stream");response.setCharacterEncoding(StandardCharsets.UTF_8.name());// 关键代码String fileName = HttpUtils.encodeAttachmentName(fileResponse.getOriginFileName(), request) ;response.addHeader("Content-Disposition", "attachment; filename=" + fileName);response.setHeader("Accept-ranges", "bytes");

HttpUtils.encodeAttachmentName实现:

public static String encodeAttachmentName(String fileName , HttpServletRequest request) {String enableFileName = fileName ;try {String userAgent = request.getHeader("User-Agent");if(StringUtils.isBlank(userAgent)){enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("*", "%2A").replace("~", "%7E");} else if (userAgent.indexOf("Firefox") > -1 ) {// FirefoxenableFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes(StandardCharsets.UTF_8)))) + "?=";} else if (userAgent.indexOf("Safari") > -1 || userAgent.toUpperCase().indexOf("MSIE") > -1) {// Safari Or IEenableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);} else {// 其他浏览器enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replace("+", "%20").replace("*", "%2A").replace("~", "%7E");}} catch (Exception e){LOGGER.warn("Failed To encode file name", e);throw new IllegalArgumentException("Failed To encode file name", e);}return enableFileName ;}

注:

  1. 火狐浏览器Firefox,只支持 enableFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes(StandardCharsets.UTF_8)))) + "?="; 这种方式;
  2. Safari 浏览器,只支持 enableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)
  3. Chrome 浏览器,可以支持 enableFileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)enableFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())
  4. 其他类型的浏览器,统一使用URLEncoder.encode的方式,这种方式可保证中文时不会出现乱码情况

URL路径中含有中文处理方式:

public static String uriEncode(String urlPath, String encoding) {StringBuffer resultUri = new StringBuffer();String[] keys = urlPath.split("/");resultUri.append(urlEncode(keys[0], encoding));for (int i = 1; i < keys.length; i++) {resultUri.append("/").append(urlEncode(keys[i], encoding));}if (urlPath.endsWith("/")) {// String#split ignores trailing empty strings,// e.g., "a/b/" will be split as a 2-entries array,// so we have to append all the trailing slash to the uri.for (int i = urlPath.length() - 1; i >= 0; i--) {if (urlPath.charAt(i) == '/') {resultUri.append("/");} else {break;}}}return resultUri.toString();}/*** Encode a URL segment with special chars replaced.*/public static String urlEncode(String url, String encoding) {if (StringUtils.isBlank(url)) {return "";}try {String encoded = URLEncoder.encode(url, encoding);return encoded.replace("+", "%20").replace("*", "%2A").replace("~", "%7E").replace("/", "%2F");} catch (UnsupportedEncodingException e) {throw new IllegalArgumentException("Failed To Encode Uri", e);}}

Java解决下载中文乱码和URL中文乱码问题相关推荐

  1. java中文 x_java环境url中文参数乱码处理

    在做搜索开发过程中,由于翻页功能需要,要把当前查询的中文条件放在URL中带到服务器进行下一页查询,结果出现乱码情况. 此时情况有如下两种: 1.在输入框输入搜索内容,直接通过from提交,参数值正常读 ...

  2. php插入中文数据库乱码以及URL参数乱码

    一.插入中文到数据库乱码 插入中文到数据库显示?号或者乱码,需要注意以下几点 1.php页面要保存为UTF-8的编码格式. 2.php在数据提交的是要用UTF8. 3.MYSQL创建表的时候要用ENG ...

  3. Java解决下载--文件名乱码

    最近常有人问到下载文件文件名出现乱码问题,今天统一给出解决方案如下 通常都会通过URLEncoder转码的方式来解决,关键代码如下: response.setContentType( "ap ...

  4. Java 解决采集UTF-8网页空格变成问号乱码

    http://blog.csdn.net/bob007/article/details/27098875 使用此方法转换后,在列表中看到的正常,但是在详情页的文本框中查看到的就是 了,只好过滤掉所有的 ...

  5. java ie下载文件名乱码问题_php中强制下载文件的代码(解决了IE下中文文件名乱码问题)...

    中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. $file_name = urlencode($_RE ...

  6. 解决下载文件中文名称乱码问题

    场景:在做下载文件功能时,发现下载的文件名称包含中文会出现乱码问题,查阅很多资料都没用解决,最后使用java.net.URLEncoder.encode对文件名称进行预处理解决该问题. 后端代码如下: ...

  7. JSP URL 中文乱码 解决方式

    JSP URL 中文乱码 解决方式 请求页面 <%  String name = java.net.URLEncoder.encode("中文名字","UTF-8& ...

  8. 一种另类的解决URL中文乱码问题--对中文进行加密、解密处理

    情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标对工作目标进行两次编码(encodeURI(enco ...

  9. java.net.url 中文乱码,.Net获取URL中文参数值的乱码问题解决方法总结

    本文总结分析了.Net获取URL中文参数值的乱码问题解决方法.分享给大家供大家参考,具体如下: 解决方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进 ...

最新文章

  1. python知识:opencv下的轮廓和区域
  2. 18个项目必备的JavaScript代码片段——数组篇
  3. 爬虫:利用cookie获取人人网登录后网页信息
  4. 关于Spring 任务调度之task:scheduler与task:executor配置的详解
  5. pcl中set程序_PCL中分割方法的介绍(3)
  6. win2008支持mysql asp.net_Win7、win2008中让IIS7支持asp的方法
  7. 复用类库内部已有功能
  8. dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
  9. 苹果提交版本后显示”缺少出口合规证明“的解决办法
  10. 电子政务的着力点---紫云舆情服务
  11. 2020计算机保研系列「最终篇」 —— 我所参加过的高校考核(北大信工/清华Open Fiesta/清华-伯克利/港中文深圳/浙大人工智能/浙大软件/上交软件/中科大先研院/复旦计算机)
  12. 树莓派远程监控+运动目标检测
  13. php 微信推送提醒,php实现微信模板消息推送
  14. 一张思维导图完成淘宝精细化运营
  15. 无线路由器桥接——手机连不上网
  16. 如何将二维数组转化为一维数组
  17. 蘑菇街商家登录php源码,蘑菇街
  18. 1000句英语经典口语
  19. 第10次Scrum会议(10/22)【欢迎来怼】
  20. c51单片机汇编语言指令,单片机汇编语言指令

热门文章

  1. Pycharm 破解补丁启动不了的坑
  2. Sublime3 设置 Fortran 代码高亮
  3. 神经网络解决哪些问题,神经网络结果不稳定
  4. Jmeter参数化方式
  5. 03-Jmeter参数化取值策略
  6. 必要商城和中国制造柔性生产
  7. Vue层叠轮播图tantan-stack
  8. 如何查看并杀死僵尸进程
  9. PDF怎么转成Excel?几个步骤轻松转换
  10. Python基础语法(函数式编程)