iOS使用react-native-zip-archive解壓windows壓縮的zip包包含中文等特殊字符亂碼解決方法

在使用react-native-zip-archive時,因為壓縮包是使用Windows系統(tǒng)GBK壓縮,代碼如下

                    let zipPath = `${Util.fileDirPath}/source/3459-zjspdyj-1.1.zip`
                    let unzipPath = `${Util.fileDirPath}/source/測試2`

                    unzip(zipPath, unzipPath, 'GBK')  //壓縮包里面包含中文字符則用GBK
                        .then((path) => {
                            console.log(`unzip completed at ${path}`)
                        })
                        .catch((error) => {
                            console.error(error)
                            let content = `解壓失敗`
                            Common.writeLog(content)
                        })

因為壓縮包里面包含中文,在Android系統(tǒng)上使用GBK解壓沒有任何問題,但是在iOS手機上解壓時,會出現(xiàn)亂碼

亂碼圖:


圖片.png

我嘗試了在unzip函數(shù)里面?zhèn)魅刖幋aUTF-8、US-ASCII、GB18030、GBK等均無效,后來想到讀取文件流轉(zhuǎn)編碼格式以失敗告終。然后各種百度找了兩三天,也沒見人有說這個庫有沒有問題,不知道是他們沒遇到這種問題還是懶得記錄,又或是對于他們簡簡單單,但是對于一個對某方面不理解的人來說,要解決還是挺費勁,費勁在于沒有思路,而知道的,或許只需要一個變量就可以搞定,react-native-zip-archive官網(wǎng)上看issues有個俄羅斯的也出現(xiàn)這樣的問題,但是沒有說解決辦法。
后面查了半天,最后發(fā)現(xiàn)一個博主說挺簡潔的https://blog.csdn.net/ismilesky/article/details/52767654,嘗試改了iOS的原生代碼。只改了一個參數(shù),其實并不是這個庫有問題,而是蘋果系統(tǒng)本身默認的,修改方法如下:

1、全局搜索:SSZipArchive,找到SSZipArchive.m文件,或者你下圖中的路徑去找SSZipArchive.m文件,找到后雙擊進去。


圖片.png

2、在SSZipArchive.m文件中搜索NSStringEncoding encoding或者kCFStringEncodingDOSLatinUS等字樣,反正是關(guān)于轉(zhuǎn)編碼的地方,因為我不確定不同版本的是不是同一個變量或者字符。
將kCFStringEncodingDOSLatinUS 改為 kCFStringEncodingGB_18030_2000,
如圖:


圖片.png

然后重新跑就可以了。

修改后正常解壓:


圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容