Jsoup.connect(字符串)编码问题

时间:2012-09-17 12:51:51

标签: jsoup

我有几个特殊的字符url我必须用Jsoup.connect(字符串)连接,但它无法加载页面(得到错误500)。我对URL的确不是那么多,但我认为它与JSoup.connect使用的编码有关。

无论如何,我将如何继续以允许链接具有如下特殊字符: ÆØÅè等,我得到的例外是:

java.io.IOException: 500 error loading URL https://maps.googleapis.com/maps/api/place/textsearch/xml?query=Averøy%20restaurant%20og%20Pizzeria,%20Norge&sensor=false&key=xx&radius=10
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:414)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:391)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:157)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:146)
at HTMLParser.doParsing(HTMLParser.java:122)
at HTMLParser.initParser(HTMLParser.java:50)
at Main.main(Main.java:15)

产生此错误的代码是:

Document gDoc = Jsoup.connect(placesURL).get();

placesURL字符串是:

https://maps.googleapis.com/maps/api/place/textsearch/xml?query=%s&sensor=false&key=XX&radius=10

任何人都有想法解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

遇到网址编码问题,我建议您先使用网址编码器工具解析您的请求(StackOverflow answer regarding those)。一个已经附带Java。

URLEncoder.encode(stringToBeEncoded, "UTF-8") 

在上面未格式化的字符串上使用它,它应该类似于:

Document gDoc = JSoup.connect(placesURL.format(URLEncoder.encode(queryString, "UTF-8"));

...不对您的整个网址进行网址编码,只需要您需要符合UTF-8(或UTF-16)标准的查询部分。

答案 1 :(得分:4)

我多么愚蠢,我没有编码查询字符串,而是编码了整个网址。

解决这个问题:

String placesUrl = String.format("https://maps.googleapis.com/maps/api/place/textsearch/xml?query=%s&sensor=false&key=XX&radius=10",URLEncoder.encode(restaurantListe[i][0],"UTF-8"));

感谢您的帮助!