android resttemplate+;httpclient头编码问题

android resttemplate+;httpclient头编码问题,android,http,apache-commons-httpclient,resttemplate,Android,Http,Apache Commons Httpclient,Resttemplate,Android客户端,使用Springs resttemplace和Apache公共HTTP客户端发出请求 我正在处理一个服务器,它有时返回401错误,带有一个http头字符串,“error”包含一个用户信息字符串。字符串与语言有关,因此可能包含斯堪的纳维亚字符等 在我的IOS应用程序中,以及在Firefox RESTclient插件中检查该字符串时,该字符串看起来都很好 然而,在我的Android应用程序中,我一辈子都无法正确地显示字符。如果有人能想出一种方法让我的数据准确无误,我将不胜感激

Android客户端,使用Springs resttemplace和Apache公共HTTP客户端发出请求

我正在处理一个服务器,它有时返回401错误,带有一个http头字符串,“error”包含一个用户信息字符串。字符串与语言有关,因此可能包含斯堪的纳维亚字符等

在我的IOS应用程序中,以及在Firefox RESTclient插件中检查该字符串时,该字符串看起来都很好

然而,在我的Android应用程序中,我一辈子都无法正确地显示字符。如果有人能想出一种方法让我的数据准确无误,我将不胜感激

服务器发送内容类型UTF-8,它在httpservletresponse上是一个常规的.setHeader(),用于设置我尝试检索的参数

下面是我在Android客户端创建resttemplate的过程(正如您所看到的,我尝试了大多数方法):

HttpClient-HttpClient=new-HttpClient();
凭据defaultcreds=新用户名密码凭据(msisdn,密码);
httpClient.getState().setCredentials(新的AuthScope(AuthScope.ANY_主机、AuthScope.ANY_端口、AuthScope.ANY_领域)、defaultcreds);
httpClient.getParams().setSoTimeout(prefs.getServerTimeout());
httpClient.getParams().setConnectionManagerTimeout(3000);
httpClient.getParams().setContentCharset(“utf-8”);
httpClient.getParams().setCredentialCharset(prefs.getCredentialsEncoding());
httpClient.getParams().setHttpElementCharset(“utf-8”);
httpClient.getParams().setUriCharset(“utf-8”);
CommonClientHttPrequestFactory requestFactory=新的CommonClientHttPrequestFactory(httpClient);
setReadTimeout(prefs.getServerTimeout());
RestTemplate RestTemplate=新的RestTemplate(requestFactory);
//添加消息转换器

列表HTTP头使用ASCII(或者在旧规范中使用拉丁语-1)。将其他编码放入标题可能有效,也可能无效

您的响应内容类型似乎是text/html。您是否尝试过在请求头中设置内容类型和字符集,如下所示?根据文件

使用HTTP传输的文本类型的文档(如text/html、text/plain等)可以在HTTP头中发送字符集参数,以指定文档的字符编码

LinkedMultiValueMap头=新建LinkedMultiValueMap();
headers.set(“内容类型”,“text/html;charset=utf-8”);
HttpEntity请求=新的HttpEntity(空,标题);
ResponseEntity response=template.exchange(url,
HttpMethod.GET、请求、Person.class);

是的,我在一些规范中看到了,美国ascii码。我只是不明白为什么它能在IOS和Firefox中工作。。。你知道我能做些什么让我的Android应用程序以UTF-8格式读取标题吗?
    HttpClient httpClient = new HttpClient();
    Credentials defaultcreds = new UsernamePasswordCredentials(msisdn, password);
    httpClient.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), defaultcreds);
    httpClient.getParams().setSoTimeout(prefs.getServerTimeout());
    httpClient.getParams().setConnectionManagerTimeout(3000);
    httpClient.getParams().setContentCharset("utf-8");
    httpClient.getParams().setCredentialCharset(prefs.getCredentialsEncoding());
    httpClient.getParams().setHttpElementCharset("utf-8");
    httpClient.getParams().setUriCharset("utf-8");
    CommonsClientHttpRequestFactory requestFactory = new CommonsClientHttpRequestFactory(httpClient);
    requestFactory.setReadTimeout(prefs.getServerTimeout());
    RestTemplate restTemplate = new RestTemplate(requestFactory);
    // Add message converters
    List<HttpMessageConverter<?>> mc = restTemplate.getMessageConverters();
    MappingJacksonHttpMessageConverter json = new MappingJacksonHttpMessageConverter();

    List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
    supportedMediaTypes.add(MediaType.APPLICATION_JSON);
    json.setSupportedMediaTypes(supportedMediaTypes);
    mc.add(json);
    restTemplate.setMessageConverters(mc);

    // Set our specific error handler
    restTemplate.setErrorHandler(new MyErrorHandler());
Status Code: 401 Unauthorized
Content-Length: 954
Content-Type: text/html;charset=utf-8
Date: Sat, 19 Jan 2013 23:53:10 GMT
ERROR: För att <contents cut out but as you see Scandinavian char looks fine here >
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="rest"
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.set("Content-Type", "text/html;charset=utf-8");
HttpEntity request = new HttpEntity(null, headers);
ResponseEntity<Person> response = template.exchange(url,
                HttpMethod.GET, request, Person.class);