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
有人可以帮助我......
答案 0 :(得分:17)
(注:请参阅下面的更新)
使用java.net
包中的URLEncoder
类。空格不是唯一需要在网址中转义的字符,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的不同部分。
答案 1 :(得分:11)
您不应该致电String.replaceAll
来对网址进行编码,而应使用java.net.URLEncoder.encode(String s, String enc)
。
请注意,您只需要对查询字符串参数(名称和值)进行编码,而不是整个URL。
使用java.net.URLEncoder.encode(String s, String enc)
对字符串进行编码时,以下规则适用:
请参阅URLEncoder
例如:
String url = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + URLEncoder.encode(origin, "UTF-8");
答案 2 :(得分:6)
以下是帮助我的答案:HTTP URL Address Encoding in Java
仅使用URL
&amp; URI
个对象。
此主题中使用URLEncoder
提及的原始方法,对包含http://
的网址中的所有字符进行编码,并使用此类url
将exception
投放到httpConnection
中 - 因此它不是一个好的选择。我现在正在使用链接中提到的URL/URI
方法,它正在按预期工作。
答案 3 :(得分:4)
java.net.URLEncoder.encode("Hello World", "UTF-8").replaceAll("\\+", "%20"));
祝你有个美好的一天=)。
答案 4 :(得分:1)
尝试
str.replaceAll("\\s","%20");
那应该解决