gpt4 book ai didi

java - 使用 Google Translate Java 库,具有特殊字符的语言返回问号

转载 作者:行者123 更新时间:2023-12-02 09:41:24 24 4
gpt4 key购买 nike

我已经设置了一个为我的学徒项目制作的 Java 程序,该程序接收英语字符串的 JSON 文件并输出在控制台中定义的不同语言的 JSON 文件。法语和意大利语等某些语言将输出正确的翻译,而俄语或日语将输出问号,如下图所示。

Question Marks

我四处搜索发现我需要获取字符串的字节,然后将其编码为 UTF-8 我确实这样做了,但仍然得到问号,所以我开始使用 Java 内置的标准字符集并尝试编码/解码字符串的不同方式我尝试过:

Encoding/Decoding

这给了我一个不同的输出:Ð?Ñ?ивеÑ?

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com