【问题标题】:Apache httpclient HTTPGET decodingApache httpclient HTTPGET 解码
【发布时间】:2018-10-09 14:07:12
【问题描述】:

我正在使用一个以 UTF-8 编码德语变音符号的 API。我的应用程序需要对这些字符进行解码和编码。编码不是问题,完全可以正常工作。为了实现这一点,我在创建新的StringEntity 时设置了一个字符集,并将其添加到请求中,如下所示:

    HttpPost request = new HttpPost(getUrl);
    if(useProxy) {
        RequestConfig config = RequestConfig.custom()
                .setProxy(proxy)
                .build();
        request.setConfig(config);
    }
    request.addHeader("APIKey", apiKey);
    request.addHeader("Accept", "application/json");
    request.addHeader("Content-type", "application/json; charset=UTF-8");
    request.setEntity(new 
    StringEntity(JsonUtils.getJsonFromObject(nachricht), "UTF-8"));

所有特殊字符(如元音变音)都会正确发送并存储在后端。 但是,当我想检索这些数据时,它会导致一些如下所示的错误:

小字符有效,但大写字母无效。似乎响应或 HTTPGET 请求是 ISO_8859_1 编码的。如何将 HTTPGET 的字符集设置为 UTF-8?我已经尝试像这样设置请求标头:

request.addHeader("Content-type", "application/json; charset=UTF-8");

并像这样解码响应的内容:

byte[] bytes = EntityUtils.toString(responseEntity).getBytes();
String responseString = new String(bytes, "UTF-8");

但由于响应的字符集似乎是错误的,使用 UTF-8 解码会导致错误..

【问题讨论】:

  • 如果不是最初的“T”,似乎还有一个错误的小写转换。首先转储java字符串的字符的int值并检查它们。也许“大写”是高 Unicode 范围内的小写字母。
  • 只是变音符号转换错误,我的屏幕截图中损坏的字母是 Ö、Ä 和 Ü,而 ö、ä 和 ü 正常工作..
  • 我打赌é÷ (\u00F7) 也可以,但É 不行。它必须是java部分。也许有一个 validation 有一个正则表达式列表 äöüß 但不是 ÄÖÜ。 Amd 不知何故 - 由于 UTF-8 可以处理所有 Unicode - 必须发生转换/替换才能接收 ?-placeholder
  • 其他可能性,相当遥远:一些转换为 Latin-1,加上大写字母不是从德语键盘获取的,而是从字符映射应用程序中错误选择的:ȀŐŰ。在每种情况下,最好在 java 中转储值;这确保它们从数据库中正确读取(MySQL 以其额外的使用Unicode URL 而闻名)。 s = s.replaceAll("\\p{ASCII}", mr -> mr.group() + Arrays.toString(mr.group().codePoints().toArray()))

标签: java api utf-8 apache-httpclient-4.x


【解决方案1】:

我遇到了同样的问题并通过将参数“UTF-8”传递给 responseEntity 来解决它:

String responseString = EntityUtils.toString(responseEntity, "UTF-8");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    相关资源
    最近更新 更多