在java中用%20替换空格
String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins="+origin+"&destinations="+destination+"&mode=driving&sensor=false&language=en-EN&units=imperial"; url = url.replaceAll(" ", "%20");
输出:
http://maps.googleapis.com/maps/api/distancematrix/xml?origins=150%20Sutter%20St%20San%20Francisco,%20CA,%20United%20States&destinations=1%20Palmer%20Sq%20E Princeton,%20NJ%2008542&mode=driving&sensor=false&language=en-EN&units=imperial
但我收到一个错误说:
java.net.MalformedURLException: Illegal character in URL
有人可以帮我吗 ..
(注:见下面的更新)
使用java.net
包中的URLEncoder
类。 空格不是唯一需要在URL中转义的字符, URLEncoder
将确保所有需要编码的字符都已正确编码。
这是一个小例子:
String url = "http://..."; String encodedUrl = null; try { encodedUrl = URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException ignored) { // Can be safely ignored because UTF-8 is always supported }
更新
正如在这个问题的评论和其他答案中所指出的, URLEncoder
类只能安全地编码URL的查询字符串参数。 我目前依靠Guava的UrlEscapers
来安全地编码URL的不同部分。
您不应该调用String.replaceAll
来编码URL,而应该使用java.net.URLEncoder.encode(String s, String enc)
。
请注意,您只需要对查询字符串参数(名称和值)进行编码,而不是整个URL。
使用java.net.URLEncoder.encode(String s, String enc)
对String进行编码时,以下规则适用:
- 字母数字字符“a”到“z”,“A”到“Z”和“0”到“9”保持不变。
- 特殊字符“。”,“ – ”,“*”和“_”保持不变。
- 空格字符“”被转换为加号“+”。
- 所有其他字符都是不安全的,并且首先使用某种编码方案将其转换为一个或多个字节。 然后每个字节由3个字符的字符串“%xy”表示,其中xy是字节的两位hex表示。 建议使用的编码方案是UTF-8。 但是,出于兼容性原因,如果未指定编码,则使用默认编码
使用平台。
请参阅URLEncoder
例如:
String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + URLEncoder.encode(origin, "UTF-8");
以下是帮助我的答案: Java中的HTTP URL地址编码
它只使用URL
和URI
对象。
在这个带有URLEncoder
线程中提到的原始aproach,编码url中的所有字符,包括http://
并使用这样的url
在httpConnection
中抛出exception
– 因此它不是一个好的选择。 我现在使用链接中提到的URL/URI
方法,它按预期工作。
java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20"));
祝你有个美好的一天=)。