对于我在nodejs中解析excel文件的初步尝试,我试图在假设它是UTF-8
编码的情况下读取该文件:
var fs = require('fs');
var excel = require('excel-stream');
fs.createReadStream(__dirname + relativePathToFile, 'utf8')
.pipe(excel())
.on('data', console.log);
但这会产生错误:
Error: j: error parsing /tmp/_1509140718263: Error: End of data reached (data length = 1910319, asked index = 1910332). Corrupted zip ?
at /apps/node_modules/excel-stream/index.js:49:34
at ConcatStream.<anonymous> (/apps/node_modules/concat-stream/index.js:36:43)
at emitNone (events.js:91:20)
at ConcatStream.emit (events.js:188:7)
at finishMaybe (/apps/node_modules/readable-stream/lib/_stream_writable.js:511:14)
at afterWrite (/apps/node_modules/readable-stream/lib/_stream_writable.js:393:3)
at _combinedTickCallback (internal/process/next_tick.js:86:20)
at process._tickCallback (internal/process/next_tick.js:104:9)
后来我忽略了编码:
fs.createReadStream(__dirname + relativePathToFile)
一切都很顺利。
这种情况让我想到了这个问题:
解析excel文件时,为什么编码不重要?
默认数据是以latin1还是二进制读取?
谁负责将可能以非拉丁语言输入的数据正确解码为原始excel文件?
答案 0 :(得分:1)
Excel .xlsx
文件采用Office Open XML格式 - 包含多个内部文件(通常为XML,带有自己的编码等)的zip存档。作为二进制文件,他们没有文本编码,当您打开它们作为流传递到Excel解析库时,您不需要提供文本编码。你得到的错误是底层库抱怨它强制它被解码为utf-8后无法将流解释为有效的zip存档。