我正在尝试使用Google语言检测API,现在我正在使用Google文档中提供的示例,如下所示:
public static String googleLangDetection(String str) throws IOException, JSONException{
String urlStr = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=";
// String urlStr = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton";
URL url = new URL(urlStr+str);
URLConnection connection = url.openConnection();
// connection.addRequestProperty("Referer","http://www.hpeprint.com");
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = reader.readLine()) != null) {
builder.append(line);
}
JSONObject json = new JSONObject(builder.toString());
for (Iterator iterator = json.keys(); iterator.hasNext();) {
String type = (String) iterator.next();
System.out.println(type);
}
return json.getString("language");
}
但我收到http错误代码'406'。
我无法理解问题所在?正如下面的谷歌搜索查询(评论)它工作正常。
当我在firefox或IE中运行它时,生成的语言检测URL本身工作正常,但它在我的java代码中失败了。
我做错了吗?
提前致谢
与Ashish
答案 0 :(得分:1)
作为一种猜测,str
上传入的内容包含在URL中无效的字符,因为错误代码406
是Not Acceptable
,并且看起来在那里返回是内容编码问题。
快速谷歌后,您似乎需要通过java.net.URLEncoder课程运行str
,然后将其附加到网址。
答案 1 :(得分:0)
在以下链接找到答案:
HTTP URL Address Encoding in Java
必须按如下方式修改代码:
URI uri = new URI("http","ajax.googleapis.com","/ajax/services/language/detect","v=1.0&q="+str,null);
URL url = uri.toURL();