Lỗi mã hóa ký tự của jsoup sau khi tải xuống qua proxy
Chẩn đoán các ký tự bị lỗi trên trang được tải qua proxy bằng cách giữ lại thông tin mã hóa của phản hồi xuyên suốt quá trình phân tích HTML.
Trang được tải qua proxy, nhưng các chữ cái có dấu trở về bị lỗi. Trước khi đổi proxy, hãy tìm vị trí đầu tiên mà các byte của phản hồi trở thành một Java String. Một InputStreamReader không có charset rõ ràng có thể đưa ra quyết định đó trước khi jsoup nhìn thấy tài liệu.
Khi jsoup tự đảm nhận việc tải, hãy giữ phản hồi nguyên vẹn cho đến khi phân tích:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();API phản hồi công bố thông tin charset bắt nguồn từ Content-Type. Nó cũng có thể chấp nhận ghi đè charset rõ ràng khi bạn đã xác định rằng khai báo của máy chủ là sai. Bản thân địa chỉ proxy không cho bạn biết tài liệu dùng bảng mã ký tự nào. Nếu cần so sánh trang công khai được phép mà không có tài khoản proxy, hãy thay máy chủ và cổng HTTP trong ví dụ bằng một ứng viên từ danh sách proxy HTTP, đồng thời giữ nguyên các kiểm tra mã hóa.
Nếu một ứng dụng khách HTTP khác cung cấp InputStream, bản nạp chồng phân tích luồng của jsoup chấp nhận tên charset và URI cơ sở. Charset null cho phép hành vi phát hiện và dự phòng đã được ghi tài liệu; một charset HTTP đã biết và đúng nên được chuyển qua một cách có chủ đích. URI cơ sở cung cấp ngữ cảnh cho các liên kết tương đối.
Khi các byte đã bị giải mã sai, việc phân tích String kết quả bằng một charset khác không khôi phục được văn bản gốc. Hãy quay lại các byte và siêu dữ liệu của phản hồi. Cũng hãy so sánh những gì đã nhận được: trang đăng nhập hoặc từ chối của proxy có thể là một tài liệu hoàn toàn khác với trang được yêu cầu, chứ không phải lỗi giải mã trong đó.