谷歌云翻译和Java的编码错误

时间:2018-02-15 11:07:42

标签: java encoding google-cloud-platform google-translate

我正在尝试使用Google云翻译。我认为问题是Google云翻译使用UTF8而jvm使用UTF16。所以我翻译了一些拼写错误。例如:

      public static void main(String... args) throws Exception {
    // Instantiates a client
    Translate translate = TranslateOptions.getDefaultInstance().getService();

    // The text to translate
    String text = "Bonjour, à qui dois-je répondre? Non, C'est l'inverse...";

    // Translates some text into Russian
    Translation translation =
        translate.translate(
            text,
            TranslateOption.sourceLanguage("fr"),
            TranslateOption.targetLanguage("en"));


    System.out.printf("Text: %s%n", text);
    System.out.printf("Translation: %s%n", StringEscapeUtils.unescapeHtml(translation.getTranslatedText()));
  }

将返回:

“翻译:你好,我应该回答谁?不,这反过来......”

而不是:

翻译:你好,我该回答谁?不,这是相反的......

我们无法更改java String的编码,Google Cloud Api不会接受任何内容(Byte []?)但是String。

有人知道如何修复它吗?

感谢您阅读

编辑:此代码现在正在运行,我从commons.apache依赖项中添加了StringEscapeUtils.unescapeHtml。我不知道是否还有其他方法可以做到。

2 个答案:

答案 0 :(得分:1)

这不是UTF8 / UTF16的问题 谷歌的答案是HTML编码。

https://en.wikipedia.org/wiki/Unicode_and_HTML

如果您想在xml / html上下文中仅使用ASCII传输unicode字符,这很常见

答案 1 :(得分:0)

即使您已经找到了解决问题的方法,但确实有针对您问题的另一种解决方法,无需使用其他库。

如上所述,默认情况下,translate方法返回html编码的String。但是,如果在方法调用中给出了匹配的TranslateOption,它可以返回纯文本字符串。

方法调用将如下所示。

    Translation translation = translate.translate(
            text,
            Translate.TranslateOption.sourceLanguage(from),
            Translate.TranslateOption.targetLanguage(to),
            Translate.TranslateOption.format("text")
    );