我正在从远程服务器下载.csv.gz
文件,并且我将此文件的内容存储为字符串。以下是我在console.log
时看到的一小部分示例:
�}�v������)��t�Y�j�8p0�eCR��
l��1�=���6������~̵r�����0c7�7L���������U:���0�����g��
如何在Node.js中解压缩,以便将其转换为原始的.csv
文件?
我已经尝试了zlib.gunzip(Buffer.new(body), callback)
,但后来又出现了错误
在Gunzip.zlibOnError(zlib.js:152:15)错误的标题检查
文件本身有效,我可以双击解压缩并在我的电脑上打开它。
我使用:zlib.createGzip();
然后gzip.pipe(writeStream);
更新
(实际)问题是我的数据是utf8
编码所以我需要确保它仍然是缓冲区或二进制文件。
答案 0 :(得分:2)
问题是fs.createWriteStream
默认为utf-8
编码,您应该将其更改为binary
,然后您就可以创建gunzip
将有效的缓冲区高兴地接受。
您可以通过将代码更改为:
来实现此目的gzip.pipe(data => writeStream(data, { encoding: 'binary'})
请参阅https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options
答案 1 :(得分:0)
更新: 我修改了代码,现在你有了一个实际解压缩的ArrayBuffer。
function decompressFile(filename) {
var decompress = zlib.createUnzip(),
input = fs.createReadStream(filename);
var data = [];
input.on('data', function(chunk){
data.push(chunk);
}).on('end', function(){
var buf = Buffer.concat(data);
zlib.gunzip(buf, function(err, buffer) {
if (!err) {
console.log(buffer.toString()+'\n');
}else{
console.log(err);
}
});
});
}
decompressFile('TestFileSheet1.csv.gz');
这看起来很直接。但我认为问题可能在您的代码中的其他位置或您正在使用的http库中。检查响应头的内容编码是否为gzip,然后调用zlib.gunzip。我认为您的http库可能已经解压缩了csv文件。