मैं एक वेबसर्वर से कुछ पाठ लोड करने के लिए नोड.जेएस का उपयोग करके HTTP-request करना चाहता हूं। चूंकि प्रतिक्रिया में बहुत अधिक पाठ (कुछ मेगाबाइट) हो सकते हैं इसलिए मैं प्रत्येक पाठ को अलग से संसाधित करना चाहता हूं। मैं निम्नलिखित कोड का उपयोग करके इसे प्राप्त कर सकता हूं:
var req = http.request(reqOptions, function(res) {
...
res.setEncoding('utf8');
res.on('data', function(textChunk) {
// process utf8 text chunk
});
});
यह समस्याओं के बिना काम करने लगता है। हालाँकि मैं HTTP-संपीड़न का समर्थन करना चाहता हूं, इसलिए मैं zlib का उपयोग करता हूं:
var zip = zlib.createUnzip();
// NO res.setEncoding('utf8') here since we need the raw bytes for zlib
res.on('data', function(chunk) {
// do something like checking the number of bytes downloaded
zip.write(chunk); // give the raw bytes to zlib, s.b.
});
zip.on('data', function(chunk) {
// convert chunk to utf8 text:
var textChunk = chunk.toString('utf8');
// process utf8 text chunk
});
यह मल्टी-बाइट पात्रों के लिए एक समस्या हो सकती है, जैसे '\u00c4'
कि दो बाइट्स होते हैं: 0xC3
और 0x84
। यदि पहली बाइट को पहले चंक ( Buffer
) और दूसरी बाइट को दूसरे चंक द्वारा कवर किया जाता है, तो chunk.toString('utf8')
टेक्स्ट चंक के अंत / शुरुआत में गलत वर्ण उत्पन्न करेगा। इससे कैसे बचा जा सकता है?
संकेत: मुझे अभी भी बफर की आवश्यकता है (अधिक विशेष रूप से बफर में बाइट्स की संख्या) डाउनलोड बाइट्स की संख्या को सीमित करने के लिए। इसलिए res.setEncoding('utf8')
गैर-संपीड़ित डेटा के लिए ऊपर दिए गए पहले उदाहरण कोड का उपयोग करना मेरी आवश्यकताओं के अनुरूप नहीं है।