如何编码动态字符串值以创建URL实例?我需要用%20,重音,非ASCII字符替换空格...? 我试图使用URLEncoder,但它也编码'/'字符,如果我给URLEncoder编码的字符串到URL构造函数,我得到一个MalformedURLException(没有协议)。Java - 编码URL
12
A
回答
3
所以你说的是你想要编码你的URL的一部分,但不是整个事情。听起来像你不得不把它分解成部分,通过编码器传递你想要编码的那些,然后重新组装它以获得你的整个URL。
32
URLEncoder
有一个很有误导性的的名字。它是根据Javadocs使用的编码格式参数使用MIME类型application/x-www-form-urlencoded
。
用这个说法它可以用于编码例如查询参数。例如,如果一个参数看起来像&/?#
其编码相当于可以一起使用:
String url = "http://host.com/?key=" + URLEncoder.encode("&/?#");
除非你有URL javadocs建议使用new URI(..).toURL
根据RFC2396执行URI编码的特殊需求。
推荐的方法来管理URL的编码和解码是使用URI
以下示例
new URI("http", "host.com", "/path/", "key=| ?/#ä", "fragment").toURL();
产生结果http://host.com/path/?key=%7C%20?/%23ä#fragment
。请注意0等字符是如何编码的而不是。
欲了解更多信息,请参阅文章HTTP URL Address Encoding in Java或how to encode URL to avoid special characters in java。
编辑
由于您的输入是一个字符串的URL,使用URI
的参数的构造函数的人会帮不了你。你也不能直接使用new URI(strUrl)
,因为它没有引用url参数。
所以在这个阶段,我们必须使用的手段来得到你想要的东西:
public URL parseUrl(String s) throws Exception {
URL u = new URL(s);
return new URI(
u.getProtocol(),
u.getAuthority(),
u.getPath(),
u.getQuery(),
u.getRef()).
toURL();
}
之前,你可以使用这个程序,你必须sanitize
您的字符串,以确保它代表一个绝对 URL。我看到两种方法:
猜测。除非已经存在,否则将
http://
添加到字符串中。
相关问题
- 1. Java URL编码
- 2. 在java中的url编码?
- 3. Java URL编码:URLEncoder与URI
- 4. 与URL编码的Java URL编码参数
- 5. UTF-8 URL解码/编码
- 6. URL编码不编码
- 7. 来自URL的Java InputStreamReader不编码“Umlaute”
- 8. 在Javascript和Java servlet中的URL编码
- 9. 在Java中检测URL的编码
- 10. Java获取正确编码的URL
- 11. Java邮件中的URL编码
- 12. Java和Solr中的Url编码问题
- 13. 来自url的Java utf-8编码
- 14. java RestTemplate GET请求与编码的URL
- 15. 使用Java编码URL查询参数
- 16. URL编码+符号
- 17. GWT:使用编码方案编码url
- 18. URL编码 - 解码
- 19. Diffbot URL编码
- 20. Knockout.js URL编码
- 21. SSRS URL编码
- 22. AJP URL编码
- 23. URL编码PHP
- 24. JS URL编码
- 25. MVC3 URL编码?
- 26. 编码URL
- 27. URL编码
- 28. SSRS URL编码
- 29. C - URL编码
- 30. ASP.Net URL编码
请举一些例子说明字符串和你的代码从上下文构造URL。 – 2011-06-01 09:27:22
不同的编码规则将适用于不同的[部分URI](http://illegalargumentexception.blogspot.com/2009/12/java-safe-character-handling-and-url.html#URI2009_ANATOMY)。正如Lukas所建议的那样,请提供您开始使用哪些信息以及想要结束的示例。 – McDowell 2011-06-01 10:45:13