java.net.URI类可以帮助;在URL的文档中找到
Note, the URI class does perform escaping of its component fields in certain circumstances. The recommended way to manage the encoding and decoding of URLs is to use an 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)混淆,
EDIT 2:
只有非法字符通过上述代码转义 – 它不转义非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ãoPaulo的查询的网址,请使用构造函数的5参数版本:
URI uri = new URI(
"http",
"www.google.com",
"/ig/api",
"weather=São Paulo",
null);
String request = uri.toASCIIString();