我已经设置了一个为我的学徒项目制作的 Java 程序,该程序接收英语字符串的 JSON 文件并输出在控制台中定义的不同语言的 JSON 文件。法语和意大利语等某些语言将输出正确的翻译,而俄语或日语将输出问号,如下图所示。
我四处搜索发现我需要获取字符串的字节,然后将其编码为 UTF-8 我确实这样做了,但仍然得到问号,所以我开始使用 Java 内置的标准字符集并尝试编码/解码字符串的不同方式我尝试过:
这给了我一个不同的输出:Ð?Ñ?ивеÑ?
package com.bis.propertyfiletranslator;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.List;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.translate.Translate;
import com.google.api.services.translate.model.TranslationsListResponse;
import com.google.api.services.translate.model.TranslationsResource;
public class Translator {
public static Translate.Translations.List list;
private static final Charset UTF_8 = Charset.forName("UTF-8");
private static final Charset ISO = Charset.forName("ISO-8859-1");
public static void translateJSONMapThroughGoogle(String input, String output, String API, String language,
List<String> subLists) throws IOException, GeneralSecurityException {
Translate t = new Translate.Builder(GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(), null).setApplicationName("PhoenUX-Google-Translate").build();
try {
list = t.new Translations().list(subLists, language).setFormat("text");
list.setKey(API);
} catch (GoogleJsonResponseException e) {
if (e.getDetails().getMessage().equals("Invalid Value")) {
System.err.println(
"\n Language not currently supported, check the accepted language codes and try again.\n\n Language Requested: "
+ language);
} else {
System.out.println(e.getDetails().getMessage());
}
}
for (TranslationsResource translationsResource : response.getTranslations()) {
for (String key : JSONFunctions.jsonHashMap.keySet()) {
JSONFunctions.jsonHashMap.remove(key);
String value = translationsResource.getTranslatedText();
String encoded = new String(value.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
JSONFunctions.jsonHashMap.put(key, encoded);
System.out.println(encoded);
break;
}
}
JSONFunctions.outputTranslationsBackToJson(output);
}
}
所以这是使用谷歌云库,我添加了一个系统输出,这样我就可以看到我尝试过的结果,所以这个代码应该是复制它所需的全部代码。
我希望“Hello”的输出是“Привет”(俄语),实际输出是???或Ð?Ñ?ивÐÑ?取决于我使用的编码。
最佳答案
String generated = new String(...)
是完全错误的。只是
put(key, value):
请注意,System.out.println
始终会出现问题,因为操作系统编码可能是某些 Windows ANSI 编码。那么它很可能不支持 Unicode - 并且 String 包含 Unicode。
关于java - 使用 Google Translate Java 库,具有特殊字符的语言返回问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038760/