【问题标题】:Decode google translate API response in JAVA在 JAVA 中解码谷歌翻译 API 响应
【发布时间】:2019-02-01 22:36:14
【问题描述】:

我需要用 JAVA 编写一个小工具,它可以使用 Google 翻译 API 将文本从英语翻译成法语。一切正常,但我有一个撇号解码问题。

原文: 继承税率

使用 Google 翻译 API 翻译的文本: Taux d'强制继承

应该如何: 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"));

但是我收到了同样问题的字符串。关于我能做什么的任何想法?

【问题讨论】:

  • 预期字符串和实际字符串似乎相同。你确定你发布的正确吗?
  • 实际上浏览器会渲染撇号。我正在检查如何逃脱它。
  • 我在“#”和“3”之间添加了一个临时空格,直到找到正确显示的方法。
  • 你的意思是'
  • @SapuSeven,是的,谢谢!

标签: java url google-translate google-translation-api


【解决方案1】:

我认为这个问题可以通过使用format 参数(docs)来解决。默认为html,但您可以将其更改为text 以接收未编码的数据。您的请求应如下所示:

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

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2011-12-26
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多