Request: أحرف معلمة؟ � � �

تم إنشاؤها على ٢٦ نوفمبر ٢٠١١  ·  17تعليقات  ·  مصدر: request/request

مرحبا!

أحاول إلغاء صفحة ويب بأحرف معلمة á é ó ú ê ã إلخ. حاولت encoding: utf-8 ، لكن ما زلت أحصل على هذه الأحرف في النتيجة.

 request.get({
      uri: url,
      encoding: 'utf-8'
      // ...

التعليق الأكثر فائدة

الطلب ({url: " www.example.comالترميز: "latin1" }، الوظيفة (خطأ، استجابة، html) {
console.log ('error:'، error)؛

ال 17 كومينتر

حسنًا ، ما هو الترميز الذي تستخدمه الصفحة؟ لا يمكنك فقط رمي محلل utf8 في ISO-أيا كان.

thejh ترميز الصفحة هو iso-8859-1 ، لقد حاولت أيضًا:

request.get({
    uri: url,
    encoding: 'iso-8859-1'
    // ...

وحصلت:

Error: Unknown encoding

لكني قرأت هذه المشكلة https://github.com/mikeal/request/issues/27 ثم http://nodejs.org/docs/v0.6.0/api/http.html#request.setEncoding

Set the encoding for the request body. Either 'utf8' or 'binary'. Defaults to null, which means that the 'data' event will emit a Buffer object..

انها عملت.

الق نظرة على مكتبة iconv.

حسنًا ... لكن هل تعلم لماذا يعمل النظام الثنائي؟

لأنه يأخذ فقط بيانات المخازن المؤقتة الخام. أيضًا ، لا تزال السلسلة غير utf8 ، لذلك لا تفعل ذلك.

لكن في هذه الحالة ، ما هي القيمة المناسبة للتشفير؟

لا ترميز. خذها كمخزن مؤقت ، ثم احشوها في iconv.

يبدو أن الارتباك قد تجاوز "ثنائي" و Buffer ، وهو أيضًا ثنائي.

غالبًا ما يكون "الثنائي" ترميزًا قديمًا من العقدة 0.1.x يومًا حيث قمنا بترميز كل الملفات الثنائية في سلاسل.

في node.js 0.2 حصلنا على كائن Buffer ، وهو تخصيص أولي للذاكرة خارج كومة v8. الكائن ليس سلسلة ، ويمكنه الاحتفاظ بالبيانات الثنائية الأولية التي تحصل عليها من واصف الملف وإرسالها إلى واصف ملف آخر دون التعرض للتحويل إلى سلسلة.

عند الطلب ، يمكنك توجيه () كائن طلب إلى أي دفق وسيتم إرسال جميع المخازن المؤقتة إلى تيار الوجهة. إذا كان كل ما تفعله هو أخذ بيانات ثنائية من طلب http وإرسالها إلى ملف أو مقبس أو استجابة http ، فعليك فقط استخدام الأنبوب ().

كيف يمكنني استخدام الأنبوب مع وحدة الطلب؟

تضمين التغريدة

أحتاج إلى إلغاء أكثر من عنوان URL واحد في نفس طلب HTTP (إنه تطبيق ويب) ثم إرسال كل هذه البيانات إلى الاستجابة.

لا يمكنني إرسالها هكذا:

request.get({
        uri: url1
}).pipe(res);

request.get({
        uri: ur2
}).pipe(res);

هل هناك أي طريقة أخرى للقيام بذلك بدلاً من

var writeStream = fs.createWriteStream('./output');
request.get({
        uri: url1
}).pipe(writeStream);

request.get({
        uri: url2
}).pipe(writeStream);

// after all pipes finish I send writeStream content to the response

؟

ما هو التدفق الذي يمكنني استخدامه مع الأنابيب؟

يمكنك استخدام أي تيار :)

استجابات خادم HTTP ، يمكنك استخدامه كنص لكائن طلب آخر ، يمكنك فتح دفق كتابة ملف. اى شى :)

الطلب ({url: " www.example.comالترميز: "latin1" }، الوظيفة (خطأ، استجابة، html) {
console.log ('error:'، error)؛

@ vickygill69 شكرًا ، إجابتك تحل مشكلتي

تعيين الترميز على null ثم استخدام المخزن المؤقت للاستجابة مع iconv يعمل بالنسبة لي. شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات