google 云翻译和 Java 编码错误

Wrong encoding of google cloud translate and Java

我正在尝试使用 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()));
  }

将 return :

"Translation: Hello, who should I answer? No, it's the opposite ..."

而不是:

翻译:你好,我应该回答谁?不,恰恰相反...

我们无法更改 java 字符串的编码,并且 Google 云 Api 除了字符串之外不接受任何内容(字节[]?)。

有人知道如何解决吗?

感谢阅读

编辑:这段代码现在可以工作了,我从 commons.apache 依赖项中添加了 StringEscapeUtils.unescapeHtml。我不知道是否有其他方法可以做到这一点。

不是UTF8/UTF16的问题
google 的答案是 html 编码的。

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

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

即使您已经找到了问题的解决方案,但我确实有另一个解决方案来解决您的问题,不需要使用额外的库。

如前所述,翻译方法 return 默认是 html 编码的字符串。但它可以 return 纯文本字符串,如果匹配 TranslateOption 在方法调用中给出。

方法调用将如下所示。

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