我需要从远程服务器获取一些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;
}
我传递的所有标题都是正确的,并且通过在Google Chrome中检查元素或者在您熟悉的Mozilla的Firebug插件上验证了相同。
现在问题是,大多数情况下我得到可读数据,但有时我会得到不可读数据。
我使用eclipse进行了调试,发现wrappedEntity下的charset显示为"US-ASCII"。 我附上jpg供参考
请问有人能告诉我在执行response = client.execute(httppost);
之前如何将响应的字符集从ASCII更改为UTF-8。
PS:正如您已经注意到的,我在标头中传递了charset=utf-8,并且我已经使用firebug和google chrome验证了我正在传递确切的标头。
请放大图片以更清楚地看到图片
提前致谢
IOUtils.toString(entity.getContent(), "UTF-8")
也无法正常工作。将其更改为EntityUtils
就解决了问题。 - divillysausages