Java中的HTTP URL地址编码

我的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();

发表评论