2012-09-17 9 views
6

Tôi có một số url ký tự đặc biệt tôi phải kết nối với Jsoup.connect (chuỗi) nhưng không tải được trang (gặp lỗi 500). Tôi không thực sự nhiều vào URL và như vậy nhưng tôi nghĩ rằng nó có liên quan đến mã hóa được sử dụng bởi JSoup.connectCác vấn đề mã hóa Jsoup.connect (string)

Dù sao, tôi sẽ tiếp tục như thế nào để cho phép các liên kết có các ký tự đặc biệt như: Æ Ø Å è vv, ngoại lệ tôi nhận được là:

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) 

mã được sản xuất lỗi này là:

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

Trường hợp chuỗi placesURL là:

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

Bất kỳ ai có ý tưởng để giải quyết vấn đề này?

Cảm ơn!

Trả lời

6

Chạy vào các sự cố mã hóa URL, tôi khuyên bạn nên phân tích cú pháp yêu cầu của mình bằng công cụ mã hóa URL trước tiên (StackOverflow answer regarding those). Một đã đi kèm với Java.

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

Sử dụng nó trên chuỗi chưa định dạng của bạn ở trên, nó sẽ giống như thế:

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

... như không URL-mã hóa toàn bộ URL của bạn, chỉ là một phần của câu hỏi, bạn cần phải tuân thủ UTF-8 (hoặc UTF-16).

+1

% s là chuỗi truy vấn đang xử lý (qua String.Format) và tôi đã có khóa, Sử dụng URLEncoder.encode (stringToBeEncoded, "UTF-8"), đã cho tôi lỗi URL sai; java.lang.IllegalArgumentException: URL không đúng định dạng: https% 3A% 2F% 2Fmaps.googleapis.com% 2Fmaps% 2Fapi% 2Fplace% 2Ftextsearch% 2Fxml% 3Fquery% 3D1001% 2520Natt% 2C% 2520Norge% 26sensor% 3Dfalse% 26key% lkg% 26radius % 3D10 – user1677631

+0

Trong trường hợp này, bạn sẽ chỉ sử dụng URLEncoder trên phần "truy vấn" của chuỗi ... ví dụ JSoup.connect (placesURL.format (URLEncoder.encode (queryString, "UTF-8")); –

4

Làm thế nào ngu ngốc của tôi, Thay vì chỉ mã hóa các chuỗi truy vấn, i mã hóa toàn bộ URL ..

giải quyết bằng cách làm điều này:

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

Thanks for the help!

+1

Tôi không còn chắc chắn là ai xứng đáng với "câu trả lời hay nhất" trước, lol. Rất vui khi tôi có thể trợ giúp. –