假设我在网址中有空格,将它转换为%20的正确方法是什么?请不要“替换”建议。
例如,如果您将“http://test.com/test和test / a”放入浏览器窗口,则转换为http://test.com/test%20and%20test/a
如果我使用URLEncoder,我甚至得到/转换。这不是我想要的。
谢谢,
这是正确的方式,似乎。添加到问题,如果路径中还有一些非ascii代码,我想用utf8编码转换为有效的URL?例如:test.com:8080/test和test /pierlag2_carré/ a?query =世界我希望它转换为test.com:8080/test%20and%20test/pierlag2_carr%C3%A9/a?query= %E4%B8%96%E7%95%8C答案 0 :(得分:4)
尝试借助URI
类分割成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
答案 1 :(得分:3)
在Java中构建URL的正确方法是创建URI
对象并填写URL的每个部分。 URI
类处理URL的不同部分的编码规则,因为它们各不相同。
URLEncoder
不是你想要的,尽管它的名字,因为它实际上是HTML格式编码。
修改强>
根据您的评论,您将收到URL作为应用程序的输入,而不是控制URL的初始生成。您当前遇到的真正问题是您收到的输入(URL)不是有效的URL。 URL / URI不能包含每个规范的空格(因此浏览器中为%20
)。
由于您无法控制无效输入,因此您将被迫将传入的URL拆分为其部分:
然后,您将不得不拆分路径并对每个部分进行单独编码,以确保您不会无意中编码分隔路径片段的/
。
最后,您可以将所有这些内容放回URI
对象中,然后将其传递给您的应用程序。
答案 2 :(得分:-3)
您可能会发现有用的代码可以替换您的网址中的空格:
String myUrl = "http://test.com/test and test/a";
myUrl = myUrl.replaceAll(" ", "%20");
URI url = new URI(myUrl);
System.out.print(url.toString());