解析excel文件时,为什么编码不重要?

时间:2017-11-07 23:06:41

标签: javascript node.js excel

对于我在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文件?

1 个答案:

答案 0 :(得分:1)

Excel .xlsx文件采用Office Open XML格式 - 包含多个内部文件(通常为XML,带有自己的编码等)的zip存档。作为二进制文件,他们没有文本编码,当您打开它们作为流传递到Excel解析库时,您不需要提供文本编码。你得到的错误是底层库抱怨它强制它被解码为utf-8后无法将流解释为有效的zip存档。