Node.js使用fs.readFileSync为何输出Buffer值?
为什么Node.js中fs.readFileSync会输出Buffer?
嘿,这个问题太常见了!你看到的<Buffer ...>其实是Node.js默认返回的二进制数据容器——Buffer对象。
原因很简单:当你调用fs.readFileSync('note.text')时,没有指定文件的编码格式,Node.js没法判断这个文本文件用的是utf8、gbk还是其他编码,所以它会直接以原始二进制字节的形式读取文件内容,并用Buffer对象来存储这些字节。你看到的那些十六进制数字(比如68、65),就是文件里每个字符对应的ASCII或UTF-8字节值——比如68对应字母h,65对应e,拼起来正好是你文件里的hello world这类内容。
怎么拿到正常的文本输出?
有两种简单的解决办法:
读取时直接指定编码
在readFileSync的第二个参数里加上编码格式(比如最常用的utf8),Node.js会自动把Buffer转换成对应编码的字符串:'use strict' var fs; fs = require("fs"); const output = fs.readFileSync('note.text', 'utf8'); console.log(output);手动把Buffer转换成字符串
如果已经拿到了Buffer对象,也可以调用它的toString()方法,传入编码格式来转换:'use strict' var fs; fs = require("fs"); const output = fs.readFileSync('note.text'); console.log(output.toString('utf8')); // 这里指定utf8编码
这样就能输出你预期的文本内容啦!
内容的提问来源于stack exchange,提问作者BatmanForLife
相关产品推荐
相关产品推荐

