2

假设我在 url 中有空格,将其转换为 %20 的正确方法是什么?请不要“替换”建议。

例如,如果您在浏览器窗口中输入“ http://test.com/test and test/a”,它会转换为http://test.com/test%20and%20test/a

如果我使用 URLEncoder,我什至得到 / 转换。这不是我想要的。

谢谢,

这是正确的方法,似乎。补充一下问题,如果路径中还有一些非 ascii 代码要转换为使用 utf8 编码的有效 url,该怎么办?eg: test.com:8080/test and test/pierlag2_carré/a?query=世界 我想把它转换成 test.com:8080/test%20and%20test/pierlag2_carr%C3%A9/a?query= %E4%B8%96%E7%95%8C

4

3 回答 3

4

URI尝试在类的帮助下拆分为 a URL

String sUrl = "http://test.com:8080/test and test/a?query=world";
URL url = new URL(sUrl);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String canonical = uri.toString();
System.out.println(canonical);

输出:

http://test.com:8080/test%20and%20test/a?query=world
于 2013-07-12T23:55:07.977 回答
3

在 Java 中构建 URL 的正确方法是创建一个URI对象并填写 URL 的每个部分。该类URI处理 URL 不同部分的编码规则,因为它们各不相同。

URLEncoder不是你想要的,尽管它的名字,因为它实际上是 HTML 表单编码。

编辑:

根据您的评论,您收到的 URL 作为应用程序的输入,并且不控制 URL 的初始生成。您当前遇到的真正问题是您收到的输入 URL 不是有效的 URL。根据规范,URL / URI 不能包含空格(因此%20在浏览器中)。

由于您无法控制无效输入,您将被迫将传入的 URL 拆分为多个部分:

  • 方案
  • 主持人
  • 小路

然后,您将不得不拆分路径并分别对每个部分进行编码,以确保您不会无意中对分隔/路径片段的部分进行编码。

最后,您可以将所有这些重新组合到一个URI对象中,然后将其传递给您的应用程序。

于 2013-07-12T22:40:52.560 回答
-3

您可能会发现此代码对替换 URL 中的空格很有用:

String myUrl = "http://test.com/test and test/a";
myUrl = myUrl.replaceAll(" ", "%20");

URI url = new URI(myUrl);
System.out.print(url.toString());
于 2013-07-12T22:46:00.253 回答