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


相关推荐

  • 博客中KindEditor配置[通俗易懂]

    博客中KindEditor配置[通俗易懂]1.下载 KindEditor2.放在static/js下3.在admin.py中配置文件:4.在static/js/kindeditor下配置config.js文件首先在kindedito官网文档中,找到代码:根据代码提示编辑:5.编辑图片和文件上传代码:#-*-coding:utf-8-*-fromdjango.httpimp…

    2022年10月12日
    0
  • 如何使用等价类划分法编写测试用例的结果_划分等价类设计测试用例

    如何使用等价类划分法编写测试用例的结果_划分等价类设计测试用例案例:如下图所示的一个两位整数加法器,需求分析中要求:①第一个数和第二个数都是只能输入-99到99之间的整数②对于输入的小于-99的数据或者大于99的数据,程序应给出明确提示③对于输入的小数、字符等非法数据,程序应给出明确提示基于上述需求,使用等价类划分法编写测试用例的步骤如下:1.根据需求分析,建立等价类表(1)有效等价类表编号数据要求1-99——0之间的整…

    2022年10月17日
    0
  • lc1d25m7c_通达信变盘指标

    lc1d25m7c_通达信变盘指标一、通达信日线*.day文件文件名即股票代码每32个字节为一天数据每4个字节为一个字段,每个字段内低字节在前00~03字节:年月日,整型04~07字节:开盘价*100,整型

    2022年8月5日
    6
  • java中保留两位小数的方法_java float保留两位小数

    java中保留两位小数的方法_java float保留两位小数项目中有一个小需求,两个整数相除,结果需要保留两位小数,即1.00、0.50这种数据格式。以下做法不行,因为两整数相除,小数点以后的数字会被截断,让运算结果为整数类型,intx=10;inty=20;inta=x/y;System.out.println(a);//输出0System.out.println(x/y);//输出0System.out.println((floa…

    2022年9月24日
    0
  • mysql8修改root的密码(如何查看自家wifi密码)

    部署环境:安装版本redhatCent7.0MYSQL版本8.0.2.0成功部署完毕后出现故障情况:1.正常启动MYSQL服务后,敲Linux中root账户和密码进入不去。2.从/etc/my.cnf配置文件中加入skip-grant-table后正常登陆,但是不能创建用户等多操作总结来说:想进去mysql后不能操作多指令,操作多指令又不能进去mysql,死…

    2022年4月13日
    128
  • android开发之应用打包签名混淆流程

    ant打包apk,对其签名和混淆,防止反编译。

    2022年3月11日
    20

发表回复

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

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