Знаки вопроса вместо перевода при использовании yandex translate api

Пишу на java. При переводе с различных языков на русский, переводчик яндекс api работает нормально. Но при переводе с русского или украинского(другие языки, частично использующие кириллицу, я не пробовал) на английский вместо перевода я получаю символы вопроса. Тоже самое с украинского на русский. Из чего я сделал вывод, что проблема в кириллице. Может при отправке кириллица как-то искажается. Вот мой код

public String translate(String textToTranslate) throws Exception{
    HttpClientBuilder builder = HttpClientBuilder.create();
    HttpClient client = builder.build();
    HttpPost httpPost = new HttpPost("https://translate.api.cloud.yandex.net/translate/v2/translate");
    httpPost.addHeader("Content-Type", "application/json");
    httpPost.addHeader("Authorization", "Bearer "+translatorsEntity.getIamToken());
    StringBuilder json = new StringBuilder();
    json.append("{");
    json.append("\"folderId\":\""+translatorsEntity.getCatalogId()+"\",");
    json.append("\"texts\":[\""+textToTranslate+"\"],");
    json.append("\"targetLanguageCode\":\"ru\"");
    json.append("}");
    httpPost.setEntity(new StringEntity(json.toString()));
    HttpResponse httpResponse = client.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    StringWriter writer = new StringWriter();
    IOUtils.copy(httpEntity.getContent(), writer, "UTF-8");
    String postRespose = writer.toString();
    Gson gson = new Gson();
    return getTranslateResult(gson.fromJson(postRespose, Object.class));
}

Пробовал жестко задавать, с какого языка я перевожу, добавляя

json.append("\"sourceLanguageCode\":\"ru\"");

но проблема осталась. Кто сталкивался с такой проблемой, просьба помочь.

Upd1. Я попробовал отправить текст через curl. Файл body.json приложил отдельно. Он был в кодировке utf-8. Русский текст перевёлся корректно.Я проверил кодировки строк IDEA. Оказалось, что кодировка английского текста, который переводится корректно везде - ISO-8859-1, а русского текста UTF-8. Но в файле, который я отправлял через curl, весь json был UTF-8. Как же тогда там он перевелся нормально, а при отправке через java(IDEA) UTF-8 не воспринимается яндекс транслейтом

Upd2. Я попробовал тот файл отправить не через curl, а через java. И русский текст нормально перевёлся. Получается, что дело именно в StringEntity, которая передается в теле httpPost.


Ответы (1 шт):

Автор решения: gregkukukev

Решение оказалось до боли простым. Заменить строку

httpPost.setEntity(new StringEntity(json.toString()));

на

httpPost.setEntity(new StringEntity(json.toString(),ContentType.APPLICATION_JSON));
→ Ссылка