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地址栏中跑一下就可以看到对应转化成什么了。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 几个国外SPS技术网站

    几个国外SPS技术网站http://www.tech-archive.net/Archive/SharePoint/microsoft.public.sharepoint.portalserver.development/http://weblogs.asp.net/autocrat/archive/2004/11/10/254825.aspxhttp://www.mev.com/modules/lists/msft/…

  • wireshark捕获arp包_安卓tcp协议抓包分析教程

    wireshark捕获arp包_安卓tcp协议抓包分析教程使用Wireshark工具抓取ARP协议的数据包,分析ARP协议的地址解析过程、自主学习逻辑以及初次访问和多次访问的区别。

    2022年10月24日
  • 给你的wordpress博客中加入喜欢的鼠标指针

    想给你的博客加个喜欢的鼠标指针吗?其实很简单的,wordpress中要加入只需修改皮肤中的css。在body中插入cursor:url(‘鼠标指针网址’)}就可以了,如果想修改鼠标指针接触到链接的鼠标样式,那只要在a中插入cursor:url(‘鼠标指针网址’),我用的是个企鹅,挺好玩的。我也发上来,喜欢的可以用用。鼠标指针转载于:https://www.cnblogs.com/joyp…

  • ckeditor 在C#中使用

    ckeditor 在C#中使用

  • av狼 php,www.ygyyxx.com

    av狼 php,www.ygyyxx.comDomainName:YGYYXX.COMRegistryDomainID:2350998641_DOMAIN_COM-VRSNRegistrarWHOISServer:whois.namesilo.comRegistrarURL:http://www.namesilo.comUpdatedDate:2020-01-08T14:48:59ZCreationDate:20…

  • springboot整合jedisCluster[通俗易懂]

    springboot整合jedisCluster[通俗易懂]JedisClusterjedis客户端提供的一个操作集群的连接对象;底层封装了单个节点电连接对象,封装了连接池的对外使用的集群对象;测试连接代码•收集节点信息(redis-cluster可以只提供若干个节点) @Test publicvoidtest(){ //收集若干个节点信息 Set<HostAndPort>set=newHashSet<Ho…

    2022年10月14日

发表回复

您的电子邮箱地址不会被公开。

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