发布日期:2018-03-26
在java中HTTP URL地址编码¶+ 查看更多
在java中HTTP URL地址编码¶
+ 查看更多
发布日期:2018-03-08 17:36
分类:JAVA
浏览次数:100
我的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 URLs编码…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的单参数构造函数不转义非法字符)
修改:添加完全限定类名,以避免与其他URI类(如apaches httpclient)混淆
修改2:
只有非法字符通过上述代码转义-它不转义非ASCII字符(参见fatih的注释)。
toASCIIString方法可用于获取仅包含US-ASCII字符的字符串:
只有非法字符通过上述代码转义-它不转义非ASCII字符(参见fatih的注释)。
toASCIIString方法可用于获取仅包含US-ASCII字符的字符串:
URI uri = new URI( "http", "search.barnesandnoble.com", "/booksearch/é", null); String request = uri.toASCIIString();
修改3:
对于包含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();