আমি ওয়েবসভার থেকে কিছু পাঠ্য লোড করতে নোড.জেএস ব্যবহার করে এইচটিটিপি-অনুরোধ করতে চাই। যেহেতু প্রতিক্রিয়াতে অনেক পাঠ্য থাকতে পারে (কিছু মেগাবাইট) আমি প্রতিটি পাঠ্যের অংশটি আলাদাভাবে প্রক্রিয়া করতে চাই। আমি নিম্নলিখিত কোড ব্যবহার করে এটি অর্জন করতে পারি:
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')সংক্ষেপিত ডেটার জন্য উপরের প্রথম উদাহরণ কোডটির মতো ব্যবহার করা আমার প্রয়োজনের সাথে খাপ খায় না।