Bahkan jika Anda sebagai programmer tahu: Node tidak tahu apa yang ada dalam file yang ingin Anda baca. Ini bisa berupa file teks, tetapi bisa juga berupa arsip ZIP atau gambar JPG - Node tidak tahu.
Karena membaca file teks itu rumit
Bahkan jika Node tahu itu untuk membaca file teks, masih tidak akan tahu pengkodean karakter mana yang digunakan (yaitu bagaimana byte dalam file memetakan ke karakter yang dapat dibaca manusia), karena pengkodean karakter itu sendiri tidak disimpan dalam file tersebut .
Ada beberapa cara untuk menebak pengkodean karakter file teks dengan lebih atau kurang percaya diri (itulah yang dilakukan editor teks saat membuka file), tetapi Anda biasanya tidak ingin kode Anda mengandalkan tebakan tanpa instruksi eksplisit Anda.
Buffer untuk menyelamatkan!
Jadi, karena tidak dan tidak bisa mengetahui semua detail ini, Node hanya membaca file byte untuk byte, tanpa mengasumsikan apa pun tentang isinya.
Dan itulah buffer yang dikembalikan: wadah yang tidak terbuka untuk konten biner mentah. Bagaimana konten ini harus ditafsirkan terserah Anda sebagai pengembang.
Ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan dalam judul.
frzsombor
4
@ frzombor Mengingat ada jawaban yang diterima, saya berasumsi OP benar - benar tertarik untuk mendapatkan string daripada Buffer dan hanya tidak bisa mengutarakan pertanyaan dengan benar. Namun demikian, orang lain mungkin datang ke sini dari Google dengan "mengapa" yang sebenarnya dalam pikiran, maka jawaban saya. :)
Agak lama, tetapi harus diketahui bahwa solusi ini memperkenalkan overhead tambahan karena buffer.toString()mengasumsikan utf-8 encoding. Dengan demikian, ini akan sama dengan (walaupun, lebih lambat dari) jawaban @hvgotcodes.
Brandon
14
The datavariabel berisi Bufferobjek. Konversikan ke dalam pengkodean ASCII menggunakan sintaks berikut:
Async:
Sinkronkan:
sumber
Itu mengembalikan objek Buffer.
Jika Anda menginginkannya dalam sebuah string, Anda dapat mengonversinya dengan
data.toString()
:sumber
buffer.toString()
mengasumsikan utf-8 encoding. Dengan demikian, ini akan sama dengan (walaupun, lebih lambat dari) jawaban @hvgotcodes.The
data
variabel berisiBuffer
objek. Konversikan ke dalam pengkodean ASCII menggunakan sintaks berikut:Secara serempak:
sumber