代码无法正确翻译Google Books API的德语字符

时间:2019-01-26 22:39:09

标签: java android-studio localization google-books

我制作了一个小应用程序,可以以整洁但简单的方式搜索并显示从Google图书检索到的数据。到目前为止,一切正常,但直接存在一个问题:尽管Google可以为我正确提供德语文本搜索结果,但由于某种原因,它会将所有特殊的德语字符(可能是Ä,Ö,Ü和ß)显示为“。”。假人或有时只是“?”。

我能够确认从InputStream构建的JSONObject已经包含这些错误。似乎来自Google的原始输入流未正确读取。奇怪的是,我在InputStreamReader中添加了“ UTF-8”编码(应包含德语字符),但显然无济于事。

这是我正在使用的http请求程序:

public class HttpRequest {

public static String request(String urlString) throws IOException {
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(10000);
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    StringBuilder builder = new StringBuilder();
    String inputLine;
    while((inputLine = in.readLine()) != null)
        builder.append(inputLine);
    in.close();
    return builder.toString();
}
}

还有什么可能出问题?我已经检查了StringBuilder,但是输入行中已经存在错误,这些错误已从BufferedReader中读出。 另外,我在官方的Google Books API指南中找不到任何语言或特定编码设置,因此我想它们应该带有通用编码,但是“ UTF-8”标志应该可以检测出它们吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是以其他方式(例如浏览器)检查原始数据。在浏览器中查看Google Books api url响应非常简单,只需使用url,响应就会以json的形式返回。 (可选)安装json查看器插件,但不需要此插件。

例如,使用以下网址:

https://www.googleapis.com/books/v1/volumes?q=Latein+key=NO

检查http标头(例如在浏览器开发人员工具中),您可以看到标头列出了具有预期编码的内容:

content-type: application/json; charset=UTF-8

查看一些德语结果的特定内容和那里的文字,我们可以看到某些书籍的德语正确字符是正确的,但并非全部。取决于有问题的书。

结论:UTF-8确实是正确的,并且某些德语字符文本的源/原始数据缺少/错误的数据。