繁体   English   中英

HTTPGet响应字符串中出现Unicode字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM