English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

حل مشكلة الأحرف المضطربة عند استخدام http في nodejs عند استلام رد من نوع html

اليوم عند إجراء طلب HTTP باستخدام nodejs، كانت البيانات المعدة هي ملف HTML، ثم استخدمت طريقة تحليل البيانات JSON كما كنت أفعله من قبل. كما كان متوقعًا، تم إرجاع خطأ: SyntaxError: Unexpected token  in JSON at position 0

لا يمكن إلا أن نحاول طريقة أخرى، نقوم بتحويل الجسم البuffer إلى toString، ثم نطبق الطباعة ونكتشف أن النص هو رمز غير مفهوم.

أول شعوري كان مشكلة الترميز، بعد البحث في Google والنظر في الوثائق الرسمية، استعرضت ثلاث طرق:

1. استخدم toString مع نمط الترميز كمعامل.

2. استخدم iconv-lite لتغيير الترميز.

3. استخدم cheerio لتحميل HTML.

لكن هذه الطرق الثلاث لم تكن السبب في خطأي، ثم رأيت في cnode شخص لديه مشكلة مشابهة، على الرغم من أن المشكلة ليست متشابهة تمامًا، لكن أحد المستجيبين ذكر استخدام الضغط gzip، مما يؤدي إلى عدم الضغط عند استقبال النصوص مما يؤدي إلى ظهور النصوص بشكل غير صحيح، وقد وجدت هذا الضغط gzip في رأس طلباتي = = أغلق وجهي بيدي.

بما أننا نعرف السبب، فإن الحل يبدو بسيطًا.

دعونا نبدأ بـ npm install zlib.

ثم قمت بجلب var zlib = require('zlib'); في رأس الملف.

ثم استعرضت الوثائق الرسمية، ووجدت هناك طريقتان للضغط، الأولى هي الاتصال المدمج، والثانية هي الاتصال المسبق.

سأستخدم طريقة الاتصال المسبق هنا.

zlib.unzip(chunk,function(error,res){
  console.log(error);
  console.log(res+"\n");
});

هذا هو الجزء الذي نتلقاه، buffer الذي نستلمه، ونحن بحاجة إلى ملاحظة أن هناك callback معينان للاتصال المسبق، الأول هو رسالة الخطأ، والثاني هو النصوص التي نحتاج إليها.

إذا كنت بحاجة إلى استخدام الاتصال المدمج، يرجى استدعاء zlib.unzipSync(buffer); ps: كان هناك خطأ في اختباري. Error: unexpected end of file

حسنًا، وقد تم حل مشكلتي بشكل ممتاز.

بهذا نكون قد وصلنا إلى نهاية محتوى هذا المقال الذي يوضح كيفية حل مشكلة عدم ظهور النصوص بشكل صحيح عند استخدام HTTP Requests في NodeJS، آمل أن يكون هذا المقال قد ألهمكم وأن تحصلوا على بعض الإلهام، ونتمنى أن تحصلوا على الدعم الكبير لتدريبات النفخ.

توصيات لك