6

我有几个特殊字符 url,我必须使用 Jsoup.connect(string) 连接,但它无法加载页面(出现错误 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

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

谢谢!

4

2 回答 2

6

遇到 URL 编码问题,我建议您首先使用 URL 编码器工具解析您的请求(有关这些的 StackOverflow 答案)。Java 已经自带了一个。

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

在上面的未格式化字符串上使用它,它应该看起来像:

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

...至于不对您的整个 URL 进行 URL 编码,只是您需要符合 UTF-8(或 UTF-16)的查询的一部分。

于 2012-09-17T20:49:56.097 回答
4

我多么愚蠢,我不仅对查询字符串进行编码,还对整个 URL 进行了编码。

通过这样做解决:

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"));

谢谢您的帮助!

于 2012-09-18T12:01:20.247 回答