أخطاء ترميز الأحرف في jsoup بعد تنزيل عبر وكيل
شخّص الأحرف المشوّشة في صفحة تُحمَّل عبر وكيل بالحفاظ على معلومات ترميز الاستجابة خلال تحليل HTML.
تُحمَّل الصفحة عبر الوكيل، لكن الحروف المشكّلة تعود مشوّشة. قبل تغيير الوكيل، حدّد أول موضع تتحول فيه بايتات الاستجابة إلى String في Java. فمُدخل InputStreamReader بلا charset صريح قد يتخذ ذلك القرار قبل أن يرى jsoup المستند.
عندما يتولى jsoup الجلب، أبقِ الاستجابة متماسكة حتى التحليل:
Connection.Response response = Jsoup
.connect("https://www.example.com/catalog")
.proxy("proxy.example", 8080)
.execute();
Document page = response.parse();تُتيح واجهة الاستجابة معلومات charset مستمدة من Content-Type. ويمكنها أيضًا قبول تجاوز صريح لـ charset عندما تتأكد من خطأ إعلان الخادم. عنوان الوكيل وحده لا يخبرك بأي ترميز أحرف يستخدمه المستند. إذا احتجت إلى مقارنة مسموح بها لصفحة عامة بلا حساب وكيل، فاستبدل مضيف HTTP ومنفذ المثال بمرشح من قائمة وكلاء HTTP مع الحفاظ على فحوص الترميز نفسها.
إذا قدّم عميل HTTP آخر InputStream، فإن حمولة تحليل التدفق في jsoup تقبل اسم charset وURI أساسًا. ويسمح charset الفارغ بسلوك الكشف والاحتياط الموثق؛ أما charset HTTP المعروف والصحيح فينبغي تمريره عن قصد. ويوفر URI الأساس سياقًا للروابط النسبية.
بعد فك ترميز البايتات بشكل خاطئ، لا يستعيد تحليل String الناتج بـ charset آخر النص الأصلي. عُد إلى البايتات وإلى بيانات الاستجابة الوصفية. وقارن أيضًا بما استُلم: فقد تكون صفحة تسجيل الدخول الخاصة بالوكيل أو رفضه مستندًا مختلفًا تمامًا عن الصفحة المطلوبة، لا فشل فك ترميز فيها.