Сторінка завантажується через проксі, але літери з діакритикою повертаються спотвореними. Перш ніж змінювати проксі, знайдіть перше місце, де байти відповіді стають Java String. InputStreamReader без явного charset може ухвалити це рішення раніше, ніж jsoup побачить документ.

Коли jsoup сам виконує завантаження, тримайте відповідь разом до розбору:

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

API відповіді надає відомості про charset, отримані з Content-Type. Він також може прийняти явне перевизначення charset, коли ви встановили, що оголошення сервера хибне. Сама адреса проксі не вказує, яке кодування символів використовує документ. Якщо потрібне дозволене порівняння публічної сторінки без проксі-акаунта, замініть HTTP-хост і порт із прикладу кандидатом зі списку HTTP-проксі, зберігши ті самі перевірки кодування.

Якщо InputStream надає інший HTTP-клієнт, перевантаження потокового розбору jsoup приймає ім'я charset і базовий URI. Нульовий charset дозволяє задокументоване визначення та резервну поведінку; відомий і правильний HTTP charset слід передавати свідомо. Базовий URI дає контекст для відносних посилань.

Після того як байти вже декодовано неправильно, розбір отриманого String з іншим charset не відновлює початковий текст. Поверніться до байтів і метаданих відповіді. Порівняйте також те, що було отримано: сторінка входу або відмова проксі може бути зовсім іншим документом, ніж запитана сторінка, а не помилкою декодування в ній.

Схожі статті