Расшифруйте ответ API Google Translate в JAVA - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно написать небольшой инструмент на JAVA, который будет переводить текст с английского на французский с помощью Google translate API. Все работает, но у меня есть проблема с расшифровкой апострофа.

Оригинальный текст: Унаследованная налоговая ставка

Текст переведен с помощью Google translate API: Taux d 'hérité наложения

Как и должно быть: Taux d'imposition hérité

Это мой метод перевода (извините за длинный метод):

private String translate(String text, String from, String to) {
    StringBuilder result = new StringBuilder();
        try {
        String encodedText = URLEncoder.encode(text, "UTF-8");
        String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from;

        URL url = new URL(urlStr);

        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        InputStream googleStream;

        if (conn.getResponseCode() == 200) {
            googleStream = conn.getInputStream(); //success
        } else
            googleStream = conn.getErrorStream();

            BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream));
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            JsonParser parser = new JsonParser();
            JsonElement element = parser.parse(result.toString());

            if (element.isJsonObject()) {
                JsonObject obj = element.getAsJsonObject();
                if (obj.get("error") == null) {
                    String translatedText = obj.get("data").getAsJsonObject().
                    get("translations").getAsJsonArray().
                    get(0).getAsJsonObject().
                    get("translatedText").getAsString();
                    return translatedText;
                }
            }

            if (conn.getResponseCode() != 200) {
                System.err.println(result);
            }

        } catch (IOException | JsonSyntaxException ex) {
            System.err.println(ex.getMessage());
        }

        return null;
    }

Я использую средство записи XML для написания текста, и сначала я подумал, что в этом есть проблема, но я заметил, что текст возвращается таким образом в потоке, поэтому я ввел параметр кодирования при инициализации InputStreamReader:

BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream, "UTF-8"));

Но я получаю строку с той же проблемой. Есть идеи о том, что я могу сделать?

1 Ответ

0 голосов
/ 27 августа 2018

Я думаю, что эта проблема решается с помощью параметра format ( docs ). По умолчанию это html, но вы можете изменить его на text для получения незашифрованных данных. Ваш запрос должен выглядеть так:

String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from + "&format=text";
...