Σφάλματα κωδικοποίησης χαρακτήρων στο jsoup μετά από λήψη μέσω διακομιστή μεσολάβησης
Διαγνώστε αλλοιωμένους χαρακτήρες σε σελίδα που φορτώθηκε μέσω διακομιστή μεσολάβησης, διατηρώντας τις πληροφορίες κωδικοποίησης της απόκρισης κατά την ανάλυση HTML.
Η σελίδα φορτώνεται μέσω του διακομιστή μεσολάβησης, αλλά τα τονισμένα γράμματα επιστρέφουν αλλοιωμένα. Πριν αλλάξετε διακομιστή μεσολάβησης, βρείτε το πρώτο σημείο όπου τα byte της απόκρισης γίνονται 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 host και τη θύρα του παραδείγματος με υποψήφιο από τη λίστα διακομιστών μεσολάβησης HTTP, κρατώντας τους ίδιους ελέγχους κωδικοποίησης.
Αν άλλος πελάτης HTTP παρέχει InputStream, η υπερφόρτωση ανάλυσης ροής του jsoup δέχεται όνομα charset και βασικό URI. Ένα null charset επιτρέπει την τεκμηριωμένη ανίχνευση και εφεδρική συμπεριφορά· ένα γνωστό και σωστό HTTP charset πρέπει να μεταφέρεται σκόπιμα. Το βασικό URI παρέχει συμφραζόμενο για σχετικούς συνδέσμους.
Μόλις τα byte αποκωδικοποιηθούν λανθασμένα, η ανάλυση του String που προκύπτει με άλλο charset δεν ανακτά το αρχικό κείμενο. Επιστρέψτε στα byte και στα μεταδεδομένα της απόκρισης. Συγκρίνετε επίσης τι ελήφθη: η σελίδα σύνδεσης ή η άρνηση του διακομιστή μεσολάβησης μπορεί να είναι εντελώς διαφορετικό έγγραφο από τη ζητούμενη σελίδα, όχι αποτυχία αποκωδικοποίησης σε αυτήν.