Код неправильно переводит немецкие символы из API Google Книг

Я создал небольшое приложение, которое ищет и отображает для меня данные, которые я получаю из Google Книг аккуратно, но просто. Пока все работает, но есть проблема непосредственно у источника: хотя Google правильно предоставляет мне результаты текстового поиска на немецком языке, он почему-то отображает все специальные немецкие символы (Ä, Ö, Ü и ß, вероятно) как " " пустышка или иногда просто "?"

Я смог подтвердить, что JSONObject, созданный из InputStream, уже содержит эти ошибки. Похоже, исходный поток от Google не читается правильно. Странно, что у меня есть кодировка UTF-8 (которая должна содержать немецкие символы), добавленная в мой InputStreamReader, но безрезультатно.

Вот процедура http-запроса, которую я использую:

public class HttpRequest {

public static String request(String urlString) throws IOException {
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(10000);
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    StringBuilder builder = new StringBuilder();
    String inputLine;
    while((inputLine = in.readLine()) != null)
        builder.append(inputLine);
    in.close();
    return builder.toString();
}
}

Что еще может пойти не так? Я уже проверил StringBuilder, но ошибки уже есть во входных линиях, которые считываются из BufferedReader. Кроме того, мне не удалось найти какой-либо язык или конкретные настройки кодировки в официальном руководстве по API книг Google, поэтому я предполагаю, что они должны иметь универсальную кодировку, но тогда флаг "UTF-8" должен их обнаруживать или нет?

1 ответ

Решение

Проще всего проверить необработанные данные другим способом, например, браузером. Глядя на ответ API-адреса Google Книг в браузере довольно просто, просто используйте URL-адрес, и ответ возвращается как json. При желании установите плагин для просмотра json, но для этого не нужно.

Например, используйте этот URL:

https://www.googleapis.com/books/v1/volumes?q=Latein+key=NO

Проверяя заголовок http (например, в инструментах разработчика браузера), вы видите, что заголовок перечисляет содержимое с ожидаемой кодировкой:

content-type: application/json; charset=UTF-8

Посмотрите на конкретный контент для некоторых немецких результатов и текст там, и мы увидим, что это правильные немецкие специальные символы для некоторых книг, но не для всех. В зависимости от рассматриваемой книги.

Вывод: UTF-8 действительно верен, а в исходных / исходных данных отсутствуют / неверные данные для некоторых текстов для немецких символов.

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