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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于COM对象创建(CoCreateInstance,与QueryInterface)

    关于COM对象创建(CoCreateInstance,与QueryInterface)panda2002-12-1905:40PM一个土问题,关于COM对象的创建 因为生活所迫,这几天必须对COM有所了解。今天看了之后,对COM对象的创建有所困惑。使用CoCreateInstance和QueryInterface两种方法创建COM对象有何不同?例子程序如下:代码://CreateaCOMobjectfromtheShellLinkcoclasshr=CoCr

    2022年7月22日
    10
  • 利用Python读取和修改Excel文件(包括xls文件和xlsx文件)——基于xlrd、xlwt和openpyxl模块

    利用Python读取和修改Excel文件(包括xls文件和xlsx文件)——基于xlrd、xlwt和openpyxl模块本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件。目录1、使用xlrd模块对xls文件进行读操作1.1获取工作簿对象1.2获取工作表对象1.3获取工作表的基本信息1.4按行或列方式获得工作表的数据1.5获取某…

    2022年5月29日
    80
  • Android源码学习之环境搭建(Ubuntu下载Android源码)

    Android源码学习之环境搭建(Ubuntu下载Android源码)已经有一个多月没有看Android的知识了,之前在杭州时就买了邓凡平的《深入理解Android卷I》一直没来得及研究。后来因为公司要求,要为新的项目做准备,做各种业务的KT和技术的training,虽然新技术本身的难度不大,但是业务知识很是复杂,搞的头大,到现在终于有了一些头绪。趁现在有时间来研究下Android的源码。之前没有接触过Linux系统,我的本本现在用的是Windows系统,已经用习

    2022年5月6日
    40
  • 日志服务(原SLS)新功能发布(14)–支持仅对指定键进行索引

    日志服务(原SLS)新功能发布(14)–支持仅对指定键进行索引

    2021年9月16日
    56
  • 二分类变量相关性分析spss_两个有序分类变量相关性的卡方检验-SPSS教程

    二分类变量相关性分析spss_两个有序分类变量相关性的卡方检验-SPSS教程一、问题与数据研究者想探索类风湿关节炎躯体感觉的症状数量与疼痛等级之间的关系,从一家大型医院入院治疗的类风湿关节炎病人中随机招募了364例研究对象。类风湿关节炎躯体感觉共有6种症状,研究者请研究对象报告其患有症状。类风湿关节炎门诊的医生使用疼痛量表对每个研究对象的疼痛进行评级。研究对象自报的类风湿关节炎躯体感觉症状数量在1-6个之间,为有序分类变量,变量名为symptoms。医生将研究对象的疼痛分…

    2022年5月17日
    130
  • devtools工具如何使用_devtool制作插件

    devtools工具如何使用_devtool制作插件7devtool快速参考目录7devtool快速参考7.1获得帮助7.2工作区层结构7.3向工作区层添加新配方7.4提取现有配方的来源7.5同步一个配方的提取源树7.6修改现有配方7.7编辑现有配方7.8更新配方7.9查看配方升级状态7.10升级配方7.11重置配方7.12建立你的配方7.13建立你的形象7.14在目标机器上部署你的软件7.15从目标机器上删除您的软件7.16在替代位置创建工作空间层7.17获取工作区中配方的状态

    2022年10月5日
    2

发表回复

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

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