代码未正确翻译 Google 本书 API 中的德语字符
Code is not translating german characters from Google Books API correctly
我制作了一个小应用程序,它可以以简洁而简单的方式搜索和显示我从 Google 书中检索到的数据。到目前为止一切正常,但直接在源头上存在一个问题:虽然 Google 正确地为我提供了德语文本搜索结果,但出于某种原因,它显示所有特殊的德语字符(可能是 Ä、Ö、Ü 和 ß)作为“�”假人或有时只是“?”。
我能够确认从 InputStream 构建的 JSONObject 已经包含那些错误。来自 Google 的原始输入流似乎没有被正确读取。奇怪的是,我将 "UTF-8" 编码(应该包含德语字符)添加到我的 InputStreamReader,但显然无济于事。
这是我正在使用的 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 读取的 inputLine 中。
此外,我无法在官方 google 书籍 api 指南中找到任何语言或编码特定设置,所以我猜它们应该带有通用编码,但是 "UTF-8" 标志应该检测到他们,还是不?
最简单的就是用另一种方式查看原始数据,比如浏览器。在浏览器中查看 Google Books api url 响应非常简单,只需使用 url,响应返回为 json。可选择安装 json 查看器插件,但不需要此插件。
例如使用这个 url:
https://www.googleapis.com/books/v1/volumes?q=Latein+key=NO
检查 http header(例如在浏览器开发人员工具中),您可以看到 header 列出了具有预期编码的内容:
content-type: application/json; charset=UTF-8
查看一些德语结果的具体内容和那里的文字,我们可以看到它对某些书籍来说是正确的德语特殊字符,但并非对所有书籍都是正确的。取决于相关书籍。
结论:UTF-8确实是正确的,source/raw数据有missing/wrong一些德文字符的数据。
我制作了一个小应用程序,它可以以简洁而简单的方式搜索和显示我从 Google 书中检索到的数据。到目前为止一切正常,但直接在源头上存在一个问题:虽然 Google 正确地为我提供了德语文本搜索结果,但出于某种原因,它显示所有特殊的德语字符(可能是 Ä、Ö、Ü 和 ß)作为“�”假人或有时只是“?”。
我能够确认从 InputStream 构建的 JSONObject 已经包含那些错误。来自 Google 的原始输入流似乎没有被正确读取。奇怪的是,我将 "UTF-8" 编码(应该包含德语字符)添加到我的 InputStreamReader,但显然无济于事。
这是我正在使用的 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 读取的 inputLine 中。 此外,我无法在官方 google 书籍 api 指南中找到任何语言或编码特定设置,所以我猜它们应该带有通用编码,但是 "UTF-8" 标志应该检测到他们,还是不?
最简单的就是用另一种方式查看原始数据,比如浏览器。在浏览器中查看 Google Books api url 响应非常简单,只需使用 url,响应返回为 json。可选择安装 json 查看器插件,但不需要此插件。
例如使用这个 url:
https://www.googleapis.com/books/v1/volumes?q=Latein+key=NO
检查 http header(例如在浏览器开发人员工具中),您可以看到 header 列出了具有预期编码的内容:
content-type: application/json; charset=UTF-8
查看一些德语结果的具体内容和那里的文字,我们可以看到它对某些书籍来说是正确的德语特殊字符,但并非对所有书籍都是正确的。取决于相关书籍。
结论:UTF-8确实是正确的,source/raw数据有missing/wrong一些德文字符的数据。