jsoup-tegnkodefeil etter en nedlasting via proxy
Diagnostiser forvanskede tegn på en side lastet via en proxy ved å bevare kodingsinformasjonen i svaret gjennom HTML-parsingen.
Siden lastes via proxyen, men bokstaver med aksenter kommer forvansket tilbake. Før du bytter proxy, finn det første stedet der svarets bytes blir en Java String. En InputStreamReader uten eksplisitt charset kan ta den avgjørelsen før jsoup ser dokumentet.
Når jsoup står for hentingen, hold svaret samlet fram til parsingen:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();Svar-API-en eksponerer charset-informasjon utledet fra Content-Type. Den kan også godta en eksplisitt charset-overstyring når du har fastslått at serverens erklæring er feil. En proxyadresse alene forteller deg ikke hvilken tegnkoding dokumentet bruker. Hvis du trenger en tillatt sammenligning av en offentlig side uten proxykonto, erstatt HTTP-verten og -porten i eksempelet med en kandidat fra HTTP-proxylisten, mens du beholder de samme kodingssjekkene.
Hvis en annen HTTP-klient leverer en InputStream, godtar jsoups stream-parse-overload et charset-navn og en basis-URI. Et null-charset tillater den dokumenterte gjenkjenningen og reserveatferden; et kjent og riktig HTTP-charset bør overføres bevisst. Basis-URI-en gir kontekst for relative lenker.
Når bytene først er dekodet feil, gjenoppretter ikke parsingen av den resulterende Stringen med et annet charset den opprinnelige teksten. Gå tilbake til bytene og metadataene i svaret. Sammenlign også det som ble mottatt: en proxys innloggingsside eller avvisning kan være et helt annet dokument enn den forespurte siden, snarere enn en dekodingsfeil i den.