jsoup simbolių koduotės klaidos po atsisiuntimo per tarpinį serverį
Diagnozuokite iškraipytus simbolius tarpinio serverio įkeltame puslapyje išlaikydami atsakymo kodavimo informaciją per HTML analizę.
Puslapis įkeliamas per tarpinį serverį, tačiau raidės su diakritiniais ženklais grįžta iškraipytos. Prieš keisdami tarpinį serverį, raskite pirmą vietą, kurioje atsakymo baitai tampa Java String. InputStreamReader be aiškaus charset gali priimti šį sprendimą anksčiau, nei jsoup pamato dokumentą.
Kai jsoup atlieka gavimą, laikykite atsakymą vienoje vietoje iki analizės:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();Atsakymo API atskleidžia charset informaciją, gautą iš Content-Type. Jis taip pat gali priimti aiškų charset pakeitimą, kai nustatėte, kad serverio deklaracija neteisinga. Vien tarpinio serverio adresas nepasako, kokią simbolių koduotę naudoja dokumentas. Jei reikia leidžiamo viešo puslapio palyginimo be tarpinio serverio paskyros, pakeiskite pavyzdžio HTTP hostą ir prievadą kandidatu iš HTTP tarpinių serverių sąrašo, išlaikydami tuos pačius kodavimo patikrinimus.
Jei kitas HTTP klientas pateikia InputStream, jsoup srauto analizės perkrova priima charset pavadinimą ir bazinį URI. Nulinis charset leidžia dokumentuotą aptikimą ir atsarginį elgesį; žinomas ir teisingas HTTP charset turėtų būti perduodamas sąmoningai. Bazinis URI suteikia kontekstą santykinėms nuorodoms.
Kai baitai jau neteisingai iškoduoti, gauto String analizė kitu charset neatkuria pradinio teksto. Grįžkite prie baitų ir atsakymo metaduomenų. Taip pat palyginkite, kas buvo gauta: tarpinio serverio prisijungimo puslapis arba atmetimas gali būti visiškai kitas dokumentas nei prašytas puslapis, o ne dekodavimo klaida jame.