[英]Unicode special characters appearing in Java console, but not in Swing
[英]HTTPGet unicode characters appearing in response String
我有一个用于集成数据的实用程序,当使用特殊字符(例如“Ô)时遇到了问题。 下面是问题所在的方法。响应来自API,格式为xml。
protected String getStringHttpContent(URI url, Map<String,String> headerParameters) throws IOException
{
HttpGet request = new HttpGet(url);
for(String parameter : headerParameters.keySet())
request.setHeader(parameter, headerParameters.get(parameter));
CloseableHttpResponse response = getClient().execute(request);
dumpHeaders(response);
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuffer sb = new StringBuffer();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
response.close();
return sb.toString();
}
njämientill在响应字符串中的结果为njämientill。 我尝试更改编码,但结果保持不变。 任何意见,将不胜感激。
确保您使用的是UTF-8端到端编码(贯穿整个链)。 这包括您的网页和用户输入(如果来自html表单)(例如),在页面,Web服务(web.xml,sun-web.xml等)上设置UTF-8。 另外,入站HttpRequest应该包含标头属性“ charset”,例如。 “内容类型:text / html; charset = utf-8”。 配置服务器端和客户端的方式取决于您使用的技术(我不知道)。
编辑 :关于您的评论,即使您是客户端,也应该设置内容类型以定义服务器期望的内容类型(因为该内容可能能够在同一URL上提供不同的内容)。
请尝试使用以下命令配置您的HttpGet:
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/xml; charset=utf-8");
或(如果服务器很旧):
request.setHeader(HttpHeaders.CONTENT_TYPE, "text/xml; charset=utf-8");
更好的是,也许将accept标头和可接受的字符集一起指定:
request.setHeader("Accept-Charset", "utf-8");
request.setHeader("Accept", "application/xml");
如果这些都不起作用 ,建议您在此处显示Postman查询,或进行Wireshark捕获以查看实际的请求和响应,并列出headerParameters映射的内容。 否则,我们将无法为您提供更多帮助(我认为您的其余代码看起来不错)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.