使用Node.js阅读文件“无效编码”错误

ws51t4hk  于 2023-01-20  发布在  Node.js
关注(0)|答案(3)|浏览(163)

我正在使用Node.js创建一个应用程序,并尝试读取名为“datalog.txt”的文件。我使用“append”函数写入该文件:

//Appends buffer data to a given file
function append(filename, buffer) {
  let fd = fs.openSync(filename, 'a+');

  fs.writeSync(fd, str2ab(buffer));

  fs.closeSync(fd);
}

//Converts string to buffer
function str2ab(str) {
  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

append("datalog.txt","12345");

这看起来工作得很好。但是,现在我想使用fs.readFileSync从文件中读取。我尝试使用以下命令:

const data = fs.readFileSync('datalog.txt', 'utf16le');

我将编码参数更改为the Node documentation中列出的所有编码类型,但所有类型都导致此错误:

TypeError: Argument at index 2 is invalid: Invalid encoding

所有我想能够做的是能够从“datalog.txt”读取数据。任何帮助将不胜感激!
注意:一旦我可以读取文件的数据,我希望能够得到一个文件的所有行的列表。

lp0sw83n

lp0sw83n1#

编码和类型是一个对象:

const data = fs.readFileSync('datalog.txt',  {encoding:'utf16le'});
v64noz0r

v64noz0r2#

好吧,经过几个小时的故障排除和看文档我想出了一个方法来做到这一点。

try {
    // get metadata on the file (we need the file size)
    let fileData = fs.statSync("datalog.txt");
    // create ArrayBuffer to hold the file contents
    let dataBuffer = new ArrayBuffer(fileData["size"]);
    // read the contents of the file into the ArrayBuffer
    fs.readSync(fs.openSync("datalog.txt", 'r'), dataBuffer, 0, fileData["size"], 0);
    // convert the ArrayBuffer into a string
    let data = String.fromCharCode.apply(null, new Uint16Array(dataBuffer));
    // split the contents into lines
    let dataLines = data.split(/\r?\n/);
    // print out each line
    dataLines.forEach((line) => {
        console.log(line);
    });
} catch (err) {
    console.error(err);
}

希望它能帮助其他有同样问题的人!

dzhpxtsq

dzhpxtsq3#

这对我很有效:
index.js

const fs = require('fs');

// Write
fs.writeFileSync('./customfile.txt', 'Content_For_Writing');

// Read
const file_content = fs.readFileSync('./customfile.txt', {encoding:'utf8'}).toString();

console.log(file_content);

节点索引. js
输出:

Content_For_Writing

Process finished with exit code 0

相关问题