Java中的HTTP URL地址编码

我的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参数版本:

URI uri = new URI(

"http",

"www.google.com",

"/ig/api",

"weather=São Paulo",

null);

String request = uri.toASCIIString();

以上是 Java中的HTTP URL地址编码 的全部内容, 来源链接: utcz.com/qa/423279.html

回到顶部