Pogreške kodiranja znakova u jsoup-u nakon preuzimanja putem proxyja
Dijagnosticirajte iskrivljene znakove na stranici učitanoj putem proxyja zadržavajući podatke o kodiranju odgovora tijekom HTML analize.
Stranica se učitava putem 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 preuzme dohvat, držite odgovor na okupu do analize:
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 nadjačavanje charseta kada utvrdite da je deklaracija poslužitelja pogrešna. Sama adresa proxyja ne govori koje kodiranje znakova dokument koristi. Ako vam treba dopuštena usporedba javne stranice bez proxy računa, zamijenite HTTP host i port iz primjera kandidatom iz popisa HTTP proxyja, zadržavajući iste provjere kodiranja.
Ako drugi HTTP klijent daje InputStream, jsoupova inačica za analizu 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 poveznice.
Kada su bajtovi jednom pogrešno dekodirani, analiza dobivenog Stringa drugim charsetom ne vraća izvorni tekst. Vratite se bajtovima i metapodacima odgovora. Usporedite i ono što je primljeno: proxyjeva prijavna stranica ili odbijanje mogu biti posve drugi dokument od tražene stranice, a ne pogreška dekodiranja u njoj.