google cloud translate和Java的错误编码
我正在尝试使用谷歌云翻译。我认为问题在于谷歌云翻译使用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字符串的编码,Google Cloud Api将不接受任何内容(字节[]?)但是绳子
有人知道怎么修吗
谢谢你的阅读
编辑:这段代码现在正在运行,我添加了StringEscapeUtils。从commons中删除HTML。apache依赖项。我不知道还有没有别的办法
# 1 楼答案
尽管您已经找到了问题的解决方案,但我确实为您的问题提供了另一个修复方案,它不需要使用额外的库
translate方法默认返回一个html编码的字符串,如前所述。但是,如果在方法调用中提供了匹配的TranslateOption,则它可以返回纯文本字符串
方法调用将如下所示
# 2 楼答案
这不是UTF8/UTF16的问题
谷歌的答案是html编码的
https://en.wikipedia.org/wiki/Unicode_and_HTML
如果希望在xml/html上下文中仅使用ASCII传输unicode字符,则这是常见的