Url URISyntaxException-如何处理带有%

Url URISyntaxException-如何处理带有%,url,http-get,Url,Http Get,我对Java相当陌生,遇到了这个问题。我试着搜索,但始终没有得到正确的答案 例如,我有一个字符串 String name = anything 10%-20% 04-03-07 现在我需要用这个字符串名构建一个url字符串,如下所示 http://something.com/test/anything 10%-20% 04-03-07 我尝试用%20替换空格,现在我得到的新url为 http://something.com/test/anything%2010%-20%%2004-03-07

我对Java相当陌生,遇到了这个问题。我试着搜索,但始终没有得到正确的答案

例如,我有一个字符串

String name = anything 10%-20% 04-03-07
现在我需要用这个字符串名构建一个url字符串,如下所示

http://something.com/test/anything 10%-20% 04-03-07
我尝试用%20替换空格,现在我得到的新url为

http://something.com/test/anything%2010%-20%%2004-03-07
当我使用这个url并在firefox中启动它时,它工作得很好,但在Java中处理时,它显然是在抛出

Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
Caused by: java.net.URISyntaxException: Malformed escape pair at index 39 : 
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.scanEscape(Unknown Source)
at java.net.URI$Parser.scan(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source)
at java.net.URI$Parser.parse(Unknown Source)
at java.net.URI.<init>(Unknown Source)
... 6 more

%25
对百分号进行编码

http://something.com/test/anything 10%-20%04-03-07
将与
http://something.com/test/anything%2010%25-20%25%2004-03-07

您应该能够使用这个示例—请记住,您需要对路径部分进行URL编码,而不是之前的任何内容,例如

String encodedUrl =
    String.format("http://something.com/%s/%s",
      URLEncoder.encode("test", "UTF-8"),
      URLEncoder.encode("anything 10%-20% 04-03-07", "UTF-8")
    );
注意:URLEncoder将空格编码为
+
而不是
%20
,但它应该同样有效,两者都可以。

您可以使用它从字符串创建uri

String url = "http://something.com/test/anything 10%-20% 04-03-07"

URI uri = new URI(
    url,
    null);
String request = uri.toASCIIString();

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(request);
HttpResponse response = httpclient.execute(httpget);

谢谢,这很好用。我正试图逃避它。我没有从替代的角度思考。
String url = "http://something.com/test/anything 10%-20% 04-03-07"

URI uri = new URI(
    url,
    null);
String request = uri.toASCIIString();

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(request);
HttpResponse response = httpclient.execute(httpget);