.jpg)
我的 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)
我想不是为了编码HTTP网址而设计的…JavaDoc说“HTML表单编码的实用程序类”…还有其他方法可以做到这一点吗?URLEncoder

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 的评论)。
该方法可用于获取仅包含 US-ASCII 字符的字符串:toASCIIString
URI uri = new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/é",
null);
String request = uri.toASCIIString();
对于具有类似 的查询的 URL,请使用构造函数的 5 参数版本:http://www.google.com/ig/api?weather=São Paulo
URI uri = new URI(
"http",
"www.google.com",
"/ig/api",
"weather=São Paulo",
null);
String request = uri.toASCIIString();

请注意,上述大多数答案都是不正确的。
类,尽管是名称,但不是这里需要的。不幸的是,孙中山给这个班级起的名字如此烦人。 用于将数据作为参数传递,而不是用于对 URL 本身进行编码。URLEncoderURLEncoder
换句话说,是网址。例如,参数将为 。这些参数是您将用于的用途。"http://search.barnesandnoble.com/booksearch/first book.pdf""http://search.barnesandnoble.com/booksearch/first book.pdf?parameter1=this¶m2=that"URLEncoder
以下两个示例突出显示了两者之间的差异。
根据 HTTP 标准,以下生成错误的参数。请注意,与号 (&) 和加号 (+) 编码不正确。
uri = new URI("http", null, "www.google.com", 80,
"/help/me/book name+me/", "MY CRZY QUERY! +&+ :)", null);
// URI: http://www.google.com:80/help/me/book%20name+me/?MY%20CRZY%20QUERY!%20+&+%20:)
以下内容将生成正确的参数,并正确编码查询。请注意空格、与号和加号。
uri = new URI("http", null, "www.google.com", 80, "/help/me/book name+me/", URLEncoder.encode("MY CRZY QUERY! +&+ :)", "UTF-8"), null);
// URI: http://www.google.com:80/help/me/book%20name+me/?MY+CRZY+QUERY%2521+%252B%2526%252B+%253A%2529

我将在这里添加一条针对Android用户的建议。您可以这样做,从而避免必须获取任何外部库。此外,上述一些答案中建议的所有搜索/替换字符解决方案都是危险的,应避免使用。
试一试:
String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
您可以看到,在此特定 URL 中,我需要对这些空格进行编码,以便我可以将其用于请求。
这利用了 Android 类中可用的几个功能。首先,URL 类可以将 url 分解为其适当的组件,因此您无需执行任何字符串搜索/替换工作。其次,此方法利用了 URI 类功能,即在通过组件而不是从单个字符串构造 URI 时正确转义组件。
这种方法的优点在于,您可以获取任何有效的 url 字符串并使其工作,而无需自己对它有任何特殊知识。
模板简介:该模板名称为【Java 独立应用程序获取一个 URL(指向文件)点击并下载无法正确编码 HTTP URL 地址……】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。