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 方法就可以了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值