我的Java独立应用程序从用户那里获取URL(指向文件),我需要点击它并下载它。我面临的问题是我无法正确编码HTTP URL地址…
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdf java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
返回我:
http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf
但是,我想要的是
http://search.barnesandnoble.com/booksearch/first%20book.pdf
(空格替换为%20)
我猜URLEncoder不是为了对HTTP URL进行编码而设计的。JavaDoc说“用于HTML表单编码的实用程序类”。还有其他方法可以做到这一点吗?
该java.net.URI中的类可以帮助; 在你找到的URL文档中
注意,URI类在某些情况下确实对其组件字段进行转义。建议的管理URL编码和解码的方法是使用URI
使用具有多个参数的构造函数之一,例如:
URI uri = new URI( "http", "search.barnesandnoble.com", "/booksearch/first book.pdf", null); URL url = uri.toURL(); //or String request = uri.toString();
(URI的单参数构造函数不会转义非法字符)
上面的代码仅对非法字符进行转义-不会对非ASCII字符进行转义(请参见fatih的注释)。 该toASCIIString方法可用于仅获取具有US-ASCII字符的字符串:
URI uri = new URI( "http", "search.barnesandnoble.com", "/booksearch/é", null); String request = uri.toASCIIString();
对于查询类似的URL http://www.google.com/ig/api?weather=São Paulo,请使用构造函数的5参数版本:
URL http://www.google.com/ig/api?weather=São Paulo
URI uri = new URI( "http", "www.google.com", "/ig/api", "weather=São Paulo", null); String request = uri.toASCIIString();