我正在尝试使用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。我不知道是否还有其他方法可以做到。
答案 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")
);