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