Java中的HTTP URL地址编码
我的Java独立应用程序从用户那里获取URL(指向文件),我需要点击它并下载它。我面临的问题是我无法正确编码HTTP URL地址…
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdfjava.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