7

私は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

これはコードスローエラーです

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

2 に答える 2

8

でパーセント記号もエンコードし%25ます。

http://something.com/test/anything 10%-20% 04-03-07で動作しhttp://something.com/test/anything%2010%25-20%25%2004-03-07ます。

たとえば、これにはURLEncoder.encodeを使用できるはずです-パス部分をurlencodeする必要があることを覚えておいてください。その前のものではありません。

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が、同じようにうまく機能するはずです。どちらも問題ありません。

于 2012-09-14T10:04:29.497 に答える
0

java.net.URIを使用して、文字列から 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);
于 2012-09-14T10:09:20.877 に答える