2012-04-18 31 views
2

我試圖找到解決這個現在整個晚上......「非法字符」,在Android中的URL HTTPGET得到雙重編碼

我寫這從一個Web服務器請求數據的應用程序。服務器以JSON格式回答。 一切運作良好,當我進入像一個元音到我的應用程序時除外。

在下面我假定請求URL是http://example.com/?q=和我尋找「耶格爾」

然後正確的呼叫中爲h ++號碼:?//example.com/ Q =Ĵ%C3% A4ger (對不起,加跡象,但垃圾郵件防護犯規讓我正確地張貼。)

所以我現在的問題是:

當我給我的網址字符串編碼或未編碼到HTTPGET它總是導致在雙倍編碼的URL中。

然後對我的服務器的請求是http://example.com/?q=J%25C3%25A4ger(它編碼百分號) 這導致服務器在數據庫中搜索J%C3%A4ger什麼是明顯的錯誤。

所以我的問題是我怎麼能achive,如果用戶輸入「耶格爾」我的應用程序調用正確編碼的網址是什麼?

感謝您的幫助!

這是目前使用的代碼... IST或許是最差的想法,我有...

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

請張貼一些代碼。 – 2012-04-18 23:01:14

+0

@菲利普 - Reichard你在這裏 – 2012-04-18 23:07:16

回答

1

更新:對不起,HttpParams並不意味着請求參數但配置HttpClient

在Android上,您可能需要使用Uri.Builder,如建議在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()); 

的Android之外,最好的辦法是手動創建的查詢字符串(與所有編碼的麻煩),或發現類似的東西到Android的Uri.Builder


+0

生病嘗試這個明天。它在這裏凌晨1點,我得走了在約6小時工作 – 2012-04-18 23:14:08

+0

同樣在這裏,我會回來檢查,明天以及:) – 2012-04-18 23:14:49

+0

對不起預期它不工作... 見上面的代碼! – 2012-04-19 06:28:34