nodejs adm-zip 解压文件 中文文件名乱码


最近的一个项目需要上传zip文件到服务器,然后解压到当前目录,最初选用unzip包进行解压,开始使用的时候不知道这个包有监听函数,认为完全是同步的。实际是有完成解压监听函数的。使用adm-zip的时候是同步的,满足需要,但是如果文件夹种有中文文件名的时候在windows下压缩的文件解压出来会出现中文乱码。换了decompress-zip也不能解决这个问题,最后是修改了adm-zip的源码解决的,但是没有做源文件的编码探测,可能会出现在不同系统下会出现问题。

修改文件地方:

原始代码:

 
     _entryName = Utils.toBuffer(val);
     var lastChar = _entryName[_entryName.length - 1];
     _isDirectory = (lastChar == 47) || (lastChar == 92);
     _entryHeader.fileNameLength = _entryName.length;
  

修改后代码:

 var nameTemp = iconv.decode(val, 'GBK');
            _entryName = Utils.toBuffer(val);
            var lastChar = _entryName[_entryName.length - 1];
            _isDirectory = (lastChar == 47) || (lastChar == 92);
            _entryHeader.fileNameLength = _entryName.length;
            _entryName = nameTemp;

修改需要使用到 iconv-lite包,修改  zipEntry.js 文件种的 entryName 方法就可以了

你可能感兴趣的:(nodejs,adm-zip,解压,中文乱码)