Chyby kódování znaků v jsoup po stažení přes proxy
Diagnostikujte zkomolené znaky na stránce načtené přes proxy tím, že při analýze HTML zachováte informace o kódování odpovědi.
Stránka se načte přes proxy, ale písmena s diakritikou se vracejí zkomolená. Než proxy změníte, najděte první místo, kde se bajty odpovědi stanou Java String. InputStreamReader bez explicitního charsetu může toto rozhodnutí učinit dřív, než jsoup dokument uvidí.
Když jsoup zajišťuje stažení, držte odpověď pohromadě až do analýzy:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();API odpovědi zpřístupňuje informace o charsetu odvozené z Content-Type. Může také přijmout explicitní přepsání charsetu, když zjistíte, že deklarace serveru je chybná. Samotná adresa proxy neříká, jaké kódování znaků dokument používá. Pokud potřebujete povolené srovnání veřejné stránky bez proxy účtu, nahraďte HTTP hostitele a port z příkladu kandidátem ze seznamu HTTP proxy a zachovejte stejné kontroly kódování.
Pokud InputStream dodá jiný HTTP klient, přetížení streamované analýzy v jsoup přijímá název charsetu a základní URI. Null charset umožňuje dokumentované rozpoznání a záložní chování; známý a správný HTTP charset je třeba předávat záměrně. Základní URI poskytuje kontext pro relativní odkazy.
Jakmile jsou bajty dekódovány nesprávně, analýza výsledného Stringu jiným charsetem původní text neobnoví. Vraťte se k bajtům a metadatům odpovědi. Porovnejte také, co bylo přijato: přihlašovací stránka nebo odmítnutí proxy může být úplně jiný dokument než požadovaná stránka, nikoli chyba dekódování v ní.