URLEncoder转换字符串问题

URLEncoder转换字符串问题今天在开发过程中遇到了一个坑,关于使用URLEncoder去encode字符串的问题,是解析一个下载地址,由于下载文件名中含有空格,导致encode之后所有空格变成了“+”,url拼接自然就出错了,下载地址相应不到报了404异常,由于之前没接触过这方面的事情,也算是给自己挖了一个小坑,特此记录一下。这段是业务背景,不想看的直接跳到下一段看解决办法哈。大概是这样,公司网站原本下载各种附件的地…

大家好,又见面了,我是你们的朋友全栈君。

今天在开发过程中遇到了一个坑,关于使用URLEncoder去encode字符串的问题,是解析一个下载地址,由于下载文件名中含有空格,导致encode之后所有空格变成了“ + ”,url拼接自然就出错了,下载地址相应不到报了404异常,由于之前没接触过这方面的事情,也算是给自己挖了一个小坑,特此记录一下。

这段是业务背景,不想看的直接跳到下一段看解决办法哈。大概是这样,公司网站原本下载各种附件的地址都是自己的静态服务器,但是以后要切换到腾讯云了,不过原来的老业务里文件地址不变,由于原本的下载地址基本都是通过hard code写死前缀http://xxxx.xxx.xxx,后面再拼接上file url例如/docs/人员名单.xls,现在由于服务器的变化,前缀地址不再固定,所以在数据库表中添加了prefix字段用于存放服务器的地址,新逻辑也就成了prefix + fileUrl,原本是一个比较简单的需求,可以算是体力活,只要把原来所有涉及下载的接口或者页面的对应位置都修改了就可以了。其中有一处页面改完之后是点击按钮后直接返回拼接好的下载地址自动下载就可以了,但是由于下载的文件多数是存在中文字符的,于是在代码中使用URLEncoder对中文进行了转码,但是却忽略了文件名可能存在空格,encode之后变成了 “ + ”,导致找不到下载地址,报了404。

解决方案

其实解决这个问题很简单简单,因为毕竟都是字符串,只要手动替换一下就可以了。

String encodeStr = URLEncoder.encode(str, "UTF-8");
encodeStr = encodeStr.replaceAll("\\+","%20");

只需要将encode后的字符串中的 “+” 替换成%20就可以了,%20就代表空格。

也许你会考虑到如果文件名本身存在 “+” 怎么办,其实这个不用担心,特殊字符在encode过程中都是被转换的,加号会被转换成%2B,所以彼此之间不会影响。

另外如果有不确定的转换问题的话,可以把url放入chrome地址栏中跑一下就可以看到对应转化成什么了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148486.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EtherCAt总线运动控制_运动控制器ethercat

    EtherCAt总线运动控制_运动控制器ethercat运动控制器作为数控系统的核心部件,在高端机器人、数控机床、工业自动化等领域得到了广泛的应用。本文以实际工程应用为背景,以研制高效、高可靠性、功能丰富的运动控制器为目标,对运动控制器及运动控制算法进行了研究与分析,对于实现高速、高效、高精度的运动控制具有重要的理论意义和实际应用价值。基于ARM+FPGA的硬件架构,提出了硬件设计的总体方案。设计了运动控制器的硬件电路及主控制板和扩展板,搭建了三维运动控制平台。提出了运动控制器软件设计的总体方案,基于MODBUS协议,设计了串口通

    2022年10月14日
    3
  • vue文件夹上传_vue上传文件前端完整实例

    vue文件夹上传_vue上传文件前端完整实例在项目中我们使用input标签设置type属性为file,上传文件后需要清空选中的文件,<inputtype=”file”ref=”clearFile”name=”file”id=”file”><button@click=”clearFile”></button><script>methods:{clearFile(){ this.$refs.clearFile.value=”;//清空file文件}}&

    2022年8月15日
    6
  • beanUtils.copy_拷贝板原理

    beanUtils.copy_拷贝板原理本文用实例介绍BeanUtils的拷贝原理。

    2025年8月28日
    6
  • Oracle备份的几种方式【转】[通俗易懂]

    Oracle备份的几种方式【转】[通俗易懂]这里使用Oracle12C来大概演示说明一下rman的基本用法,这里不会深入讨论,因为本人也只是刚刚才接触,只是结合了网上的一些文章以及自己的实践来总结并拿出来大家学习,谢谢目录一、关于备份与恢

    2022年6月30日
    34
  • java过滤器怎么使用(过滤器滤纸怎么配置)

    过滤器的作用:用于过滤请求,在请求发出前后,做一些检查或操作,配置及使用步骤如下:1.要配置Filter,首先建立一个Java类,实现Filter接口,代码如下importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servl

    2022年4月12日
    141
  • deepfacelab最新版使用教程(deepfacelab训练技巧)

    欢迎进入本教程,本教程不定期更新本文教程内容更新时间为:2019/2,本文最后更新时间为:2019/3/8欢迎进群讨论,我不是群主,群主的各QQ群号码请看:https://deepfakes.com.cn/index.php/资助升级群这几天朱茵换脸杨幂的事件上了热门,我们群不存在该违法问题。然而因为网上的这个事件,2群排队已经可以说排到了明年。群主表示等风波结束了再考虑新群,毕竟群主不想…

    2022年4月17日
    518

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号