2012-04-18 58 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