我的Java独立应用程序从用户那里获得一个URL(指向一个文件),我需要点击它并下载它。我面临的问题是,我无法正确编码HTTP URL地址
例如:
URL:http://search.barnesandnoble.com/booksearch/first book.pdf
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(
“http”,
“search.barnesandnoble.com”,
“/booksearch/first book.pdf”,
无效);
URL=uri.toURL();
//或字符串请求=uri.toString();
(URI的单参数构造函数不会转义非法字符)
上述代码仅转义非法字符-它不会转义非ASCII字符(请参阅fatih的注释)。
toASCIIString方法可用于获取仅包含US-ASCII字符的字符串:
URI=新URI(
“http”,
“search.barnesandnoble.com”,
“/booksearch/e”,
无效);
String request=uri.toascistring();
对于具有类似http://www.google.com/ig/api?weather=S圣保罗,使用构造函数的5参数版本:
URI=新URI(
“http”,
“www.google.com”,
“/ig/api”,
“天气=圣保罗”,
无效);
String request=uri.toascistring();