Strona ładuje się przez proxy, ale litery z akcentami wracają zniekształcone. Przed zmianą proxy znajdź pierwsze miejsce, w którym bajty odpowiedzi stają się Java String. InputStreamReader bez jawnego charsetu może podjąć tę decyzję, zanim jsoup zobaczy dokument.

Gdy jsoup obsługuje pobieranie, utrzymuj odpowiedź w całości do analizy:

Connection.Response response = Jsoup
    .connect("https://www.example.com/catalog")
    .proxy("proxy.example", 8080)
    .execute();
Document page = response.parse();

API odpowiedzi udostępnia informacje o charsetcie pochodzące z Content-Type. Może też przyjąć jawne nadpisanie charsetu, gdy ustalisz, że deklaracja serwera jest błędna. Sam adres proxy nie mówi, jakiego kodowania znaków używa dokument. Jeśli potrzebujesz dozwolonego porównania publicznej strony bez konta proxy, zastąp host i port HTTP z przykładu kandydatem z listy proxy HTTP, zachowując te same kontrole kodowania.

Jeśli inny klient HTTP dostarcza InputStream, przeciążenie analizy strumienia w jsoup przyjmuje nazwę charsetu i bazowy URI. Null charset pozwala na udokumentowane wykrywanie i zachowanie awaryjne; znany i poprawny charset HTTP należy przekazywać świadomie. Bazowy URI daje kontekst dla linków względnych.

Gdy bajty zostaną już błędnie zdekodowane, analiza powstałego Stringu innym charsetem nie odzyskuje oryginalnego tekstu. Wróć do bajtów i metadanych odpowiedzi. Porównaj też to, co odebrano: strona logowania lub odmowa proxy może być zupełnie innym dokumentem niż żądana strona, a nie błędem dekodowania w niej.

Powiązane artykuły