1. 程式人生 > >nodejs adm-zip 解壓檔案 中文檔名亂碼

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