Ошибки кодировки Charset во французских документах с Open Calais

Я пытаюсь сделать простой вызов API OpenCalais, чтобы сделать тегирование сущностей в необработанном документе, написанном на французском языке (так что есть много акцентированных символов). В возвращенном ответе все акцентированные символы преобразуются в странные символы.

Я уже прочитал документацию по API, я установил заголовок "Content-Type" на "text/raw; charset=utf-8", я проверил, что текст обязательно закодирован в UTF-8.

Это код, который я использую для чтения содержимого из файла:

public static String readInput(String filename) {
    Path file = Paths.get(filename);
    Charset charset = Charset.forName("UTF-8");
    String line, content = "";
    try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
        while ((line = reader.readLine()) != null) {
            content += line;
        }
    } catch (IOException x) {
        System.err.format("IOException: %s%n", x);
    }

    return content;
}

Перед отправкой запроса я распечатал строку, прочитанную из файла. Он показал оригинальный текст без ошибок кодирования.

Вот код, который я использую, чтобы сделать запрос и получить ответ от OpenCalais API:

// make call to the API link
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost postRq = new HttpPost(url);

    // add necessary headers (custom)
    postRq.addHeader("x-ag-access-token", tokenKey);
    postRq.addHeader("x-calais-language", lang);
    postRq.addHeader("outputFormat", outputFormat);

    // add necessary headers (fixed)
    postRq.addHeader("Content-Type", "text/raw;charset=utf-8");
    postRq.addHeader("x-calais-contentClass", "news");
    postRq.addHeader("Accepted-Charset", "utf-8");

    // pass body content in the call
    StringEntity entityInput = null;
    try {
        entityInput = new StringEntity(text);
        postRq.setEntity(entityInput);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    // execute the call
    HttpResponse response = null;
    try {
        response = httpClient.execute(postRq);
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (response.getStatusLine().getStatusCode() != 200) {
        throw new RuntimeException("Failed : HTTP error code : "
                + response.getStatusLine().getStatusCode());
    }

    // read the response
    String output, result = "";
    BufferedReader br = null;

    try {
        br = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        while ((output = br.readLine()) != null) {
            result += output + "\n";
            System.out.println(output); // !!! the returned text has strange symbols
        }
        br.close();
    } catch (UnsupportedOperationException | IOException e) {
        e.printStackTrace();
    }

    // close the connection
    httpClient.getConnectionManager().shutdown();

Вот несколько вещей, которые я попробовал (и все же потерпел неудачу):

  • Переписать весь текст (без копирования и вставки),
  • Скопируйте текст в Sublime Text, исправьте все возможные акценты (я удаляю акцентированные символы и переписываю их снова, чтобы избежать неожиданного конфликта кодирования, возникающего при копировании-вставке), сохраняйте с кодировкой UTF-8.

Не могли бы вы сказать мне, как это исправить? Спасибо!

PS: я разместил свой вопрос на дискуссионном форуме OpenCalais на их веб-сайте, но пока не получил решения.

0 ответов

Другие вопросы по тегам