Android 客户端,使用 Springs resttemplace 和 Apache 通用 HTTP 客户端发出请求。
我正在处理一个服务器,它有时会返回一个 401 错误,带有一个 http 标头字符串,“ERROR”包含一个用户信息字符串。该字符串取决于语言,因此它可能包含例如斯堪的纳维亚字符。
该字符串在我的 IOS 应用程序中看起来很好,当我在 Firefox RESTclient 插件中检查它时也是如此。
但是,在我的 Android 应用程序中,我一辈子都无法正确显示字符。如果有人能想到一种方法,我可以使数据正确显示,我将非常感激。
服务器发送内容类型 UTF-8,它是 httpservletresponse 上的常规 .setHeader() 设置我尝试检索的参数。
这是我在我的 Android 客户端中创建的 resttemplate(我尝试了大多数方法,如你所见):
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());
这是我的 http 响应,如果我在那里运行相同的请求,则从 Firefox 中的 restclient 复制:
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"