1

我正在尝试连接到我的查询字符串保存一些数据的网络服务。不好的是,该数据包含 utf-8 字符,这会产生问题。

如果我只是用普通字符串调用 HttpGet,我会得到“非法字符”异常。所以我用谷歌搜索并尝试了一些 utf-8 魔法。

            HttpClient httpclient = new DefaultHttpClient();
        httpclient.getParams().setParameter("http.protocol.content-charset", "UTF-8");
        String utfurl = URLEncoder.encode(url, "utf-8");
        HttpGet httpGet = new HttpGet(utfurl);
        HttpResponse response = httpclient.execute(httpGet);
        content = response.getEntity().getContent();
            } catch (Exception e) {
                Log.d(TAG, "getInputStream: " +e.getMessage());

现在我不会得到非法字符,但它似乎完全弄乱了 utfurl,因为我得到了“目标主机不能为空,或在参数中设置”。可能是因为他无法识别混乱字符串中的“http://”部分。有什么建议吗?

问候

4

1 回答 1

7

我想你想要一个 URL 编码的查询字符串。如果是这样,请使用:

String query = "?param=value";
String host = "http://my.host.name.com/";
String encodedUrl = host + UrlEncoder.encode(query,"utf-8");

基本思想是您只想编码查询字符串,而不是主机名或协议。

于 2011-02-14T10:58:05.163 回答