Nodejs读取大型txt文件并转换编码
我在读取txt
编码的大windows-1255
文件时遇到问题。这是我的代码,它从非常大的txt
文件中读取数据。如何读取非常大的文件并将编码从windows-1255
转换为UTF-8
注意:使用fs.readFileSync
不适用于大文件,因为它不能返回整个文件。我尝试将其与encoding
包一起使用。
这是我当前正在读取文件的代码:
async extractDataFromTxtFile(file, values) {
const data = [];
let count = 0;
return new Promise((resolve, reject) => {
const s = fs.createReadStream(file.tempFilePath)
.pipe(es.split())
.pipe(es.mapSync(function (line) {
s.pause();
count++;
if (count > 1) {
//sort arrayData and create json of users
const valueItem = line.split("|");
const proceed = valueItem.reduce((acc, item, idx) => {
return {
...acc,
[values[idx]]: item
}
}, {});
data.push(proceed);
}
s.resume();
})
.on('error', function (err) {
console.log('Error while reading file.', err);
})
.on('end', function () {
resolve(data);
})
);
});
}
回答如下:所以面对这个问题的其他人,我都是通过使用iconv
https://www.npmjs/package/iconv流选项来解决的,如下所示:
const iconv = new Iconv('CP1255', 'utf-8');
return new Promise((resolve, reject) => {
const s = fs.createReadStream(file.tempFilePath)
.pipe(es.pipe(iconv))
.pipe(es.split())
我要做的就是将iconv通过管道传递到流中
Chunked data假设您正在从HTTP流中分块读取数据。逻辑输入是单个文档(完整的POST请求数据)但物理输入将分散在多个缓冲区(请求块)。
您必须将小缓冲区累积到一个大缓冲区中在执行转换之前。如果不这样做,您将得到具有多字节和有状态字符集的意外结果,例如UTF-8和ISO-2022-JP。
以上内容仅在您自己调用Iconv#convert()时适用。如果使用流接口,则node-iconv负责拼接部分字符序列再次合并在一起。
Nodejs读取大型txt文件并转换编码
我在读取txt
编码的大windows-1255
文件时遇到问题。这是我的代码,它从非常大的txt
文件中读取数据。如何读取非常大的文件并将编码从windows-1255
转换为UTF-8
注意:使用fs.readFileSync
不适用于大文件,因为它不能返回整个文件。我尝试将其与encoding
包一起使用。
这是我当前正在读取文件的代码:
async extractDataFromTxtFile(file, values) {
const data = [];
let count = 0;
return new Promise((resolve, reject) => {
const s = fs.createReadStream(file.tempFilePath)
.pipe(es.split())
.pipe(es.mapSync(function (line) {
s.pause();
count++;
if (count > 1) {
//sort arrayData and create json of users
const valueItem = line.split("|");
const proceed = valueItem.reduce((acc, item, idx) => {
return {
...acc,
[values[idx]]: item
}
}, {});
data.push(proceed);
}
s.resume();
})
.on('error', function (err) {
console.log('Error while reading file.', err);
})
.on('end', function () {
resolve(data);
})
);
});
}
回答如下:所以面对这个问题的其他人,我都是通过使用iconv
https://www.npmjs/package/iconv流选项来解决的,如下所示:
const iconv = new Iconv('CP1255', 'utf-8');
return new Promise((resolve, reject) => {
const s = fs.createReadStream(file.tempFilePath)
.pipe(es.pipe(iconv))
.pipe(es.split())
我要做的就是将iconv通过管道传递到流中
Chunked data假设您正在从HTTP流中分块读取数据。逻辑输入是单个文档(完整的POST请求数据)但物理输入将分散在多个缓冲区(请求块)。
您必须将小缓冲区累积到一个大缓冲区中在执行转换之前。如果不这样做,您将得到具有多字节和有状态字符集的意外结果,例如UTF-8和ISO-2022-JP。
以上内容仅在您自己调用Iconv#convert()时适用。如果使用流接口,则node-iconv负责拼接部分字符序列再次合并在一起。