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

标签 java utf-8 google-translate

我已经设置了一个为我的学徒项目制作的 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/

相关文章:

java - Spring Boot : java. sql.SQLException:用户访问被拒绝

java - 如何分离 TextView 以仅影响一个 TextView ?

Android Studio : Duplicate files copied in APK project. 属性

jQuery翻译+切换,如何链接两者?

java - Google App Engine Java 错误

java - Jodatime重叠方法不检查等于

database - 如何将 postgreSQL 中的数据库转换为 utf8?

php - 从文件导入sql语句时的编码问题

MySQL Workbench 系统变量差异

ios - iPhone 上的谷歌翻译 API