最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Nodejs读取大型txt文件并转换编码

IT培训 admin 6浏览 0评论

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负责拼接部分字符序列再次合并在一起。

发布评论

评论列表 (0)

  1. 暂无评论