关于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被解码成了空格,+保持不变。 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-03-14 10:45  Marydon  阅读(333)  评论(0编辑  收藏  举报