Памылкі кадавання сімвалаў 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-проксі, захоўваючы тыя ж праверкі кадавання.
Калі іншы HTTP-кліент падае InputStream, перагрузка разбору патоку jsoup прымае назву charset і базавы URI. Null charset дазваляе яго дакументаванае выяўленне і запасныя паводзіны; вядомы і правільны HTTP charset трэба перадаваць свядома. Базавы URI дае кантэкст для адносных спасылак.
Пасля няправільнага дэкадавання байтоў разбор атрыманага String з іншым charset не аднаўляе зыходны тэкст. Вярніцеся да байтоў і метаданых адказу. Параўнайце таксама тое, што атрымана: старонка ўваходу проксі або адмова могуць быць цалкам іншым дакументам, чым запытаная старонка, а не збой дэкадавання ў ёй.