Как захардкодить строку в Jsoup? (проблемы с символами)

270
10 апреля 2017, 04:58
package model;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
/**
 * Created by promoscow on 08.04.17.
 */
public class SchoolStrategy implements Strategy {
    private final String URL_FORMAT = "http://schools.mel.fm/school/gimnazii?schoolType=2%2C5&page=%d";
    private static final String USER_AGENT = "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";
    private static final String REFERRER = "none";
    private final String filePath = "./src/" + String.valueOf(this
            .getClass()
            .getPackage()
            .getName()
            .replace(".", "/") + "/schools-test.html");
    protected Document getDocument(int page) throws IOException {
        String b = "http://schools.mel.fm/school/";
        String a = "gimnazii?schoolType=2%2C5&page=";
        String c = b + a + page;
        return Jsoup.connect(c).userAgent(USER_AGENT).referrer(REFERRER).get();
    }
    public void getSchools(String searchString) {
        try {
            Document document = getDocument(0);
            BufferedWriter writer = new BufferedWriter(new FileWriter("sc.html"));
            System.out.println(document.html());
            writer.write(document.html());
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Проблема в том, что в строке содержится знак процента, из чего появляются лишние символы: 25. Как их убрать, ума не приложу. Перепробовал много чего, не помогает. Помогите!

Jsoup должен распарсить строку

http://schools.mel.fm/school/gimnazii?schoolType=2%2C5&page=0

вместо этого в него попадает строка

http://schools.mel.fm/school/gimnazii?schoolType=2%252C5&page=0
Answer 1

Дело в том, что символ % используется для кодированния других (запрещенных) символов в URL. В вашем случае последовательность 2%2C5 - это закодированная (экранированная) строка 2,5. То есть получается, что вы передает уже закодированную строку и её кодируют еще раз.

Решение простое - предавайте не закодированную строку

protected Document getDocument(int page) throws IOException {
    String b = "http://schools.mel.fm/school/";
    String a = "gimnazii?schoolType=2,5&page=";
    String c = b + a + page;
    return Jsoup.connect(c).userAgent(USER_AGENT).referrer(REFERRER).get();
}
READ ALSO
Как узнать ориентацию экрана на Android-е

Как узнать ориентацию экрана на Android-е

Как сделать чтобы программа заработала и вывела информацию о том в кокой ориентации у тебя находится экран смартфона , если уже создал функцию...

276
Ошибка при компиляции исходников java

Ошибка при компиляции исходников java

Здравствуйте, только начал изучать javaУ меня три класса взятые из учебника:

321
в JAR-файле не работают картинки

в JAR-файле не работают картинки

Есть небольшое GUI приложение, состоящее из нескольких окошек, в котором используются картинки (работаю в Intellij Idea)Они лежат в отдельной папке...

253
Перехват события touchEvent

Перехват события touchEvent

Есть разметка такого вида:

329