nodejs adm-zip 解壓檔案 中文檔名亂碼
阿新 • • 發佈:2019-01-01
最近的一個專案需要上傳zip檔案到伺服器,然後解壓到當前目錄,最初選用unzip包進行解壓,開始使用的時候不知道這個包有監聽函式,認為完全是同步的。實際是有完成解壓監聽函式的。使用adm-zip的時候是同步的,滿足需要,但是如果資料夾種有中文檔名的時候在windows下壓縮的檔案解壓出來會出現中文亂碼。換了decompress-zip也不能解決這個問題,最後是修改了adm-zip的原始碼解決的,但是沒有做原始檔的編碼探測,可能會出現在不同系統下會出現問題。
修改後程式碼:
修改需要使用到iconv-lite包,修改 zipEntry.js 檔案種的 entryName 方法就可以了
修改檔案地方:
原始程式碼:
_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 方法就可以了