Код неправильно переводит немецкие символы из API Google Книг - PullRequest
0 голосов
/ 27 января 2019

Я создал небольшое приложение, которое ищет и отображает для меня данные, которые я получаю из 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 Ответ

0 голосов
/ 27 января 2019

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

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

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

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

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

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

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

...