Greške kodiranja znakova u jsoup-u nakon preuzimanja preko proxyja
Dijagnosticirajte iskrivljene znakove na stranici učitanoj preko proxyja čuvajući podatke o kodiranju odgovora kroz HTML parsiranje.
Stranica se učitava preko proxyja, ali slova s dijakriticima vraćaju se iskrivljena. Prije nego promijenite proxy, pronađite prvo mjesto gdje bajtovi odgovora postaju Java String. InputStreamReader bez izričitog charseta može donijeti tu odluku prije nego jsoup vidi dokument.
Kada jsoup obavi preuzimanje, držite odgovor na okupu do parsiranja:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();API odgovora izlaže podatke o charsetu izvedene iz Content-Typea. Može prihvatiti i izričito nadvladavanje charseta kada utvrdite da je serverska deklaracija pogrešna. Sama adresa proxyja ne govori koje kodiranje znakova dokument koristi. Ako vam treba dopušteno poređenje javne stranice bez proxy računa, zamijenite HTTP host i port iz primjera kandidatom iz liste HTTP proxyja, zadržavajući iste provjere kodiranja.
Ako drugi HTTP klijent daje InputStream, jsoup-ova varijanta parsiranja toka prihvaća naziv charseta i osnovni URI. Null charset dopušta dokumentirano otkrivanje i rezervno ponašanje; poznat i ispravan HTTP charset treba svjesno prenijeti. Osnovni URI daje kontekst za relativne veze.
Kada su bajtovi jednom pogrešno dekodirani, parsiranje dobivenog Stringa drugim charsetom ne vraća izvorni tekst. Vratite se bajtovima i metapodacima odgovora. Uporedite i ono što je primljeno: proxyjeva prijavna stranica ili odbijanje mogu biti sasvim drugi dokument od tražene stranice, a ne greška dekodiranja u njoj.