jsoup-teckenkodningsfel efter en nedladdning via en proxy
Diagnostisera förvanskade tecken på en sida som laddats via en proxy genom att bevara svarets kodningsinformation genom HTML-tolkningen.
Sidan laddas via proxyn, men bokstäver med accenter kommer tillbaka förvanskade. Innan du byter proxy, hitta den första platsen där svarets byte blir en Java String. En InputStreamReader utan explicit charset kan fatta det beslutet innan jsoup ser dokumentet.
När jsoup sköter hämtningen, håll svaret samlat fram till tolkningen:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();Svar-API:t exponerar charset-information som härleds från Content-Type. Det kan också acceptera en explicit charset-överskridning när du har fastställt att serverns deklaration är felaktig. En proxyadress i sig säger inte vilken teckenkodning dokumentet använder. Om du behöver en tillåten jämförelse av en offentlig sida utan proxykonto, ersätt HTTP-värden och -porten i exemplet med en kandidat från HTTP-proxylistan, medan du behåller samma kodningskontroller.
Om en annan HTTP-klient tillhandahåller en InputStream accepterar jsoups stream-parse-överlagring ett charset-namn och en bas-URI. Ett null-charset tillåter dess dokumenterade identifiering och reservbeteende; ett känt och korrekt HTTP-charset bör föras vidare medvetet. Bas-URI:n ger sammanhang för relativa länkar.
När byten väl har avkodats felaktigt återställer inte tolkningen av den resulterande Stringen med ett annat charset den ursprungliga texten. Gå tillbaka till byten och svarets metadata. Jämför också det som togs emot: en proxys inloggningssida eller avvisning kan vara ett helt annat dokument än den begärda sidan, snarare än ett avkodningsfel i den.