关于java.net.URLEncoder.encode()将空格转成+问题
1.情景展示
如上图所示,当我们使用jdk自带的类对数据进行URL编码时,空格会被转成+。
这其实是不对的,我们知道:
空格对应url编码是:%20,所以,jdk自带的URLEncoder将空格转成+是不对的。
如何解决?
2.解决方案
既然jdk自带的URLEncoder有问题,我们就有两种解决办法。
一种是仍然使用它,然后将编码结果中的+替换成:%20即可。
另一种就是使用第三方jar包中的工具类来完成编码。
我们这里只说第一种。
第一步:测试"+"能否正常编码。
我们可以看到:
+被编码成了:%2B,理应如此。
第二步:测试"+"和"%20"能否解码为空格。
我们可以看到:
"+"和"%20"都被解码成了空格。
有了上两步的测试,我们知道将+替换成%20是可行的。
对编码结果调用如下方法,将编码结果中的"+"全部替换成"%20"。
String.replaceAll("\\+", "%20"));
URLEncoder.encode("Marydon 博客园+", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
3.javascript
URL编码encodeURI()
我们可以看到:
空格被编码成了%20,但是+并没有进行编码。
URL解码
%20被解码成了空格,+保持不变。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/18072349