Помилки кодування символів у jsoup після завантаження через проксі
Діагностуйте спотворені символи на сторінці, завантаженій через проксі, зберігаючи відомості про кодування відповіді під час розбору HTML.
Сторінка завантажується через проксі, але літери з діакритикою повертаються спотвореними. Перш ніж змінювати проксі, знайдіть перше місце, де байти відповіді стають 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 не відновлює початковий текст. Поверніться до байтів і метаданих відповіді. Порівняйте також те, що було отримано: сторінка входу або відмова проксі може бути зовсім іншим документом, ніж запитана сторінка, а не помилкою декодування в ній.