“Illegal Characters” in URL for HttpGet in Android get double-encoded

时间秒杀一切 提交于 2020-01-04 04:15:09

问题


I am trying to find a solution to this the whole evening now...

I write an app which requests data from a web server. The Server answers in JSON format. Everything works well except when I enter a umlaut like ä into my App.

In the following I assume the request URL is http://example.com/?q= and I am searching for "Jäger"

The correct call would then be h++p://example.com/?q=J%C3%A4ger (Sorry for plus-signs but the spam protection doesnt let me post it correctly.)

So my problem is now:

When I give my URL String encoded or unencoded over to HttpGet it will always result in a doublee-encoded URL.

The Request to my Server is then http://example.com/?q=J%25C3%25A4ger (It encodes the percent signs) which leads to the server searching in database for J%C3%A4ger what is obviously wrong.

So my question is how can I achive that if the user enters "Jäger" my app calls the correctly encoded URL?

Thanks for any help!

Here is the currently used code... Ist probably the worst possible idea I had...

URI url = new URI("http", "//example.com/?q=" + ((EditText)findViewById(R.id.input)).getText().toString(), null);
Log.v("MyLogTag", "API Request: " +  url);
HttpGet httpGetRequest = new HttpGet(url);

// Execute the request in the client
HttpResponse httpResponse;
httpResponse = defaultClient.execute(httpGetRequest);

回答1:


Update: Sorry, HttpParams isn't meant for request parameters but for configuring HttpClient.

On Android, you might want to use Uri.Builder, like suggested in this other SO answer:

Uri uri = new Uri.Builder()
    .scheme("http")
    .authority("example.com")
    .path("someservlet")
    .appendQueryParameter("param1", foo)
    .appendQueryParameter("param2", bar)
    .build();

HttpGet request = new HttpGet(uri.toString());

// This looks very tempting but does NOT set request parameters
// but just HttpClient configuration parameters:
// HttpParams params = new BasicHttpParams();
// params.setParameter("q", query);
// request.setParams(params);

HttpResponse response = defaultClient.execute(request);
String json = EntityUtils.toString(response.getEntity());

Outside of Android, your best bet is building the query string manually (with all the encoding hassles) or finding something similar to Android's Uri.Builder.




来源:https://stackoverflow.com/questions/10219299/illegal-characters-in-url-for-httpget-in-android-get-double-encoded

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!