নোড.জেএস এর fs.readFile () স্ট্রিংয়ের পরিবর্তে বাফারটি কেন দেয়?


377

আমি test.txt(যা জাভাস্ক্রিপ্ট উত্সের একই ফোল্ডারে রয়েছে) এর সামগ্রীটি পড়তে এবং এই কোডটি ব্যবহার করে এটি প্রদর্শনের চেষ্টা করছি:

var fs = require("fs");

fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data);
});

এর বিষয়বস্তু test.txtতৈরি করা হয়েছিল nano:

পরীক্ষার নোড.জেএস পড়ুন ফাইল ()

এবং আমি এটি পাচ্ছি:

Nathan-Camposs-MacBook-Pro:node_test Nathan$ node main.js
<Buffer 54 65 73 74 69 6e 67 20 4e 6f 64 65 2e 6a 73 20 72 65 61 64 46 69 6c 65 28 29>
Nathan-Camposs-MacBook-Pro:node_test Nathan$ 

উত্তর:


561

ডক্স থেকে :

যদি কোনও এনকোডিং নির্দিষ্ট না করা থাকে, তবে কাঁচা বাফারটি ফিরে আসবে।

যা ব্যাখ্যা করতে পারে <Buffer ...>। একটি বৈধ এনকোডিং নির্দিষ্ট করুন, উদাহরণস্বরূপ utf-8, ফাইলের নামের পরে আপনার দ্বিতীয় প্যারামিটার হিসাবে। যেমন,

fs.readFile("test.txt", "utf8", function(err, data) {...});

164

চেষ্টা

fs.readFile("test.txt", "utf8", function(err, data) {...});

মূলত আপনার এনকোডিং নির্দিষ্ট করা দরকার।


66

এটি গুগলের উপরে উঠে আসে, তাই আমি আসল প্রশ্নটি সম্পর্কে কিছু প্রাসঙ্গিক তথ্য যুক্ত করতে চাই (জোর আমার):

নোড.জেএস এর fs.readFile () স্ট্রিংয়ের পরিবর্তে বাফারটি কেন দেয়?

কারণ ফাইলগুলি সর্বদা পাঠ্য হয় না

আপনি যদি প্রোগ্রামার হিসাবে এটি জানেন তবে: আপনি যে ফাইলটি পড়ার চেষ্টা করছেন তাতে নোডের কোনও ধারণা নেই। এটি কোনও পাঠ্য ফাইল হতে পারে তবে এটি একটি জিপ সংরক্ষণাগার বা জেপিজির চিত্রও হতে পারে - নোড জানে না।

কারণ পাঠ্য ফাইল পড়া জটিল y

এমনকি নোড জানত যে এটি কোনও পাঠ্য ফাইলটি পড়তে হবে, তবুও কোন অক্ষর এনকোডিং ব্যবহৃত হবে তা এখনও বুঝতে পারে না (যেমন ফাইল মানচিত্রে বাইটগুলি কীভাবে মানব-পঠনযোগ্য অক্ষরগুলিতে পরিণত হয়), কারণ অক্ষর এনকোডিং নিজেই ফাইলটিতে সংরক্ষণ করা হয় না ।

কমবেশি আত্মবিশ্বাসের সাথে টেক্সট ফাইলগুলির অক্ষর এনকোডিংয়ের অনুমান করার উপায় রয়েছে (এটি কোনও ফাইল খোলার সময় পাঠ্য সম্পাদকরা যা করেন) তবে আপনি সাধারণত আপনার সুস্পষ্ট নির্দেশনা ছাড়াই অনুমানের উপর নির্ভর করতে চান না।

বাফারদের উদ্ধার!

সুতরাং, কারণ এটি এই সমস্ত বিবরণটি জানে না এবং জানতে পারে না, নোড কেবলমাত্র বাইটের জন্য ফাইলের বাইটটি পড়বে, তার বিষয়বস্তু সম্পর্কে কিছু না ধরে।

ফিরে আসা বাফারটি হ'ল: কাঁচা বাইনারি সামগ্রীর জন্য একটি অপ্রচলিত ধারক। এই বিষয়বস্তুর কীভাবে ব্যাখ্যা করা উচিত তা বিকাশকারী হিসাবে আপনার উপর নির্ভর করে।


10
এটি কেবলমাত্র উত্তর যে আসলে উত্তর শিরোনামে প্রশ্ন।
ফ্রিজসম্বর

4
@frzsombor একটি গৃহীত উত্তর আছে যে দেওয়া, আমি ওপি সত্যিই অনুমান চাই হয়েছিল বাফার পরিবর্তে স্ট্রিং পেতে আগ্রহী এবং মাত্র ফ্রেজ প্রশ্ন ডান না। তবুও অন্যান্য লোকেরা গুগল থেকে আসল "কেন" মাথায় রেখে এখানে আসতে পারে, তাই আমার উত্তর। :)
লায়লো


38

এটি একটি বাফার অবজেক্ট ফিরিয়ে দিচ্ছে।

যদি আপনি এটি একটি স্ট্রিংয়ে চান, আপনি এটি দিয়ে রূপান্তর করতে পারেন data.toString():

var fs = require("fs");

fs.readFile("test.txt", function (err, data) {
    if (err) throw err;
    console.log(data.toString());
});

13
পুরাতন ধরনের, কিন্তু এটি পরিচিত হবে এই সমাধান প্রবর্তন অতিরিক্ত ওভারহেড যেহেতু যে buffer.toString()অনুমান UTF-8 যাহাই হউক না কেন এনকোডিং। সুতরাং, এটি @hvgotcodes এর উত্তরের সমান (যদিও কম ধীর) হবে।
ব্র্যান্ডন

14

dataপরিবর্তনশীল একটি রয়েছে Bufferঅবজেক্ট। নিম্নলিখিত সিনট্যাক্স ব্যবহার করে এএসসিআইআই এনকোডিংয়ে রূপান্তর করুন:

data.toString('ascii', 0, data.length)

অ্যাসিঙ্ক্রোনাস:

fs.readFile('test.txt', 'utf8', function (error, data) {
    if (error) throw error;
    console.log(data.toString());
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.