java - 代码未正确翻译来自 Google Books API 的德语字符
问题描述
我制作了一个小应用程序,它可以为我搜索并显示我从 Google 图书中检索到的数据,这些数据以简洁而简单的方式进行。到目前为止一切正常,但直接在源头上存在一个问题:尽管 Google 正确地为我提供了德语文本搜索结果,但由于某种原因,它会将所有特殊的德语字符(可能是 Ä、Ö、Ü 和 ß)显示为“�”虚拟或有时只是“?”。
我能够确认从 InputStream 构建的 JSONObject 已经包含这些错误。似乎没有正确读取来自 Google 的原始输入流。奇怪的是我在 InputStreamReader 中添加了“UTF-8”编码(应该包含德语字符),但显然无济于事。
这是我正在使用的 http-request 程序:
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(s) 中。另外,我在官方的谷歌图书 api 指南中找不到任何语言或编码特定设置,所以我猜它们应该带有通用编码,但是“UTF-8”标志应该检测到它们,还是没有?
解决方案
最简单的方法是用另一种方式检查原始数据,例如浏览器。在浏览器中查看 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 确实是正确的,并且对于德语字符的某些文本,源/原始数据缺少/错误数据。
推荐阅读
- java - 在 java eclipse 中导入外部库
- xcode - React-Native 无法手动链接 XCode 上的库
- c# - 如何建立与远程数据库 sql server 的连接?
- node.js - 可以注意在 Elastic Beanstalk AWS 上使用 Nodejs 在本地磁盘上保存图像吗?
- r - 逻辑 glmer{lme4} 模型 isSingular 尽管非常简单
- flutter - “模板具有自由形式的签名者。” 文档
- file-upload - 在发送 GraphQL API 模拟请求数据时在 Postman 响应中获取不支持的媒体类型
- python - 单击带有 python 请求的按钮
- ubuntu - 如何阻止无人值守升级升级我自定义安装的 Debian 软件包?
- plotly-python - 使用 plotly 实时绘图