在 JAVA 中解码 google 翻译 API 响应
Decode google translate API response in JAVA
我需要在 JAVA 中编写一个小工具,它将使用 Google 翻译 API 将文本从英语翻译成法语。一切正常,但我有一个撇号解码问题。
原文:
继承税率
使用 Google 翻译 API 翻译的文本:
晚礼服'征收遗产
应该如何:
传统拼版装饰
这是我的翻译方法(抱歉,方法太长):
private String translate(String text, String from, String to) {
StringBuilder result = new StringBuilder();
try {
String encodedText = URLEncoder.encode(text, "UTF-8");
String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from;
URL url = new URL(urlStr);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
InputStream googleStream;
if (conn.getResponseCode() == 200) {
googleStream = conn.getInputStream(); //success
} else
googleStream = conn.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream));
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result.toString());
if (element.isJsonObject()) {
JsonObject obj = element.getAsJsonObject();
if (obj.get("error") == null) {
String translatedText = obj.get("data").getAsJsonObject().
get("translations").getAsJsonArray().
get(0).getAsJsonObject().
get("translatedText").getAsString();
return translatedText;
}
}
if (conn.getResponseCode() != 200) {
System.err.println(result);
}
} catch (IOException | JsonSyntaxException ex) {
System.err.println(ex.getMessage());
}
return null;
}
我正在使用 XML 编写器来编写文本,首先我认为这有问题,但我观察到文本在流中是这样返回的,所以我引入了编码参数我初始化 InputStreamReader:
BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream, "UTF-8"));
但是我收到的字符串有同样的问题。关于我能做什么有什么想法吗?
我认为使用format
参数(docs)可以解决这个问题。它默认为 html
,但您可以将其更改为 text
以接收未编码的数据。您的请求应如下所示:
String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from + "&format=text";
我需要在 JAVA 中编写一个小工具,它将使用 Google 翻译 API 将文本从英语翻译成法语。一切正常,但我有一个撇号解码问题。
原文: 继承税率
使用 Google 翻译 API 翻译的文本: 晚礼服'征收遗产
应该如何: 传统拼版装饰
这是我的翻译方法(抱歉,方法太长):
private String translate(String text, String from, String to) {
StringBuilder result = new StringBuilder();
try {
String encodedText = URLEncoder.encode(text, "UTF-8");
String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from;
URL url = new URL(urlStr);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
InputStream googleStream;
if (conn.getResponseCode() == 200) {
googleStream = conn.getInputStream(); //success
} else
googleStream = conn.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream));
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(result.toString());
if (element.isJsonObject()) {
JsonObject obj = element.getAsJsonObject();
if (obj.get("error") == null) {
String translatedText = obj.get("data").getAsJsonObject().
get("translations").getAsJsonArray().
get(0).getAsJsonObject().
get("translatedText").getAsString();
return translatedText;
}
}
if (conn.getResponseCode() != 200) {
System.err.println(result);
}
} catch (IOException | JsonSyntaxException ex) {
System.err.println(ex.getMessage());
}
return null;
}
我正在使用 XML 编写器来编写文本,首先我认为这有问题,但我观察到文本在流中是这样返回的,所以我引入了编码参数我初始化 InputStreamReader:
BufferedReader reader = new BufferedReader(new InputStreamReader(googleStream, "UTF-8"));
但是我收到的字符串有同样的问题。关于我能做什么有什么想法吗?
我认为使用format
参数(docs)可以解决这个问题。它默认为 html
,但您可以将其更改为 text
以接收未编码的数据。您的请求应如下所示:
String urlStr = "https://www.googleapis.com/language/translate/v2?key=" + sKey + "&q=" + encodedText + "&target=" + to + "&source=" + from + "&format=text";