1

私のクエリがいくつかのデータを保持している Web サービスに接続しようとしています。悪いことに、このデータには 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());

これで、不正な文字は取得されなくなりましたが、代わりに「ターゲット ホストが null になってはならない、またはパラメーターで設定されてはならない」というメッセージが表示されるため、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 に答える