6

リモートサーバーからJSONオブジェクトをフェッチする必要があります。そのために、ASCII文字セットを使用してデコードしているためと思われる奇妙なデータがフェッチされることを除いて、うまく機能しているこの関数を使用しています。

私が使用している以下の方法を見つけてください

public HttpResponse call(String serviceURL,String serviceHost,String namespace,String methodName,String payloadKey, String payloadValue) throws ClientProtocolException,IOException,JSONException
    {
            HttpResponse response = null;
            HttpContext HTTP_CONTEXT = new BasicHttpContext();
            HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0");
            HttpPost httppost = new HttpPost(serviceURL);
            httppost.setHeader("User-Agent",Constants.USER_AGENT_BROWSER_FIREFOX);
            httppost.setHeader("Accept", "application/json, text/javascript, */*");
            httppost.setHeader("Accept-Language","en-US,en;q=0.8");
            httppost.setHeader("Content-Encoding", "foo-1.0");
            httppost.setHeader("Content-Type", "application/json; charset=UTF-8");
            httppost.setHeader("X-Requested-With","XMLHttpRequest");
            httppost.setHeader("Host",serviceHost);
            httppost.setHeader("X-Foo-Target", String.format("%s.%s", namespace,methodName));
            /*Making Payload*/
            JSONObject objectForPayload = new JSONObject();
            objectForPayload.put(payloadKey, payloadValue);
            StringEntity stringentity = new StringEntity(objectForPayload.toString());
            httppost.setEntity(stringentity);
            response = client.execute(httppost);
            return response;


    }

私が渡しているこれらのヘッダーはすべて正しいです。Mozilla に精通している場合は、Google chrome または Firebug プラグインの要素を検査して同じことを確認しました。

問題は、ほとんどの場合、読み取り可能なデータを取得していますが、読み取り不能なデータを取得することもあります。

Eclipse を使用してデバッグしたところ、wrappedEntity の下の文字セットが「US-ASCII」として表示されていることに気付きました。参考までにjpgを貼っておきますここに画像の説明を入力

誰かが私が行う前に、応答の文字セットをASCIIからUTF-8に変更する方法を教えてくださいresponse = client.execute(httppost);。PS: ヘッダーに charset=utf-8 を渡していることに気付いたように、正確なヘッダーを渡していることを firebug と google chrome を使用して既に確認しています。

拡大して画像をより鮮明にご覧ください

前もって感謝します

4

5 に答える 5