iOS使用react-native-zip-archive解压windows压缩的zip包包含中文等特殊字符乱码解决方法

在使用react-native-zip-archive时,因为压缩包是使用Windows系统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系统上使用GBK解压没有任何问题,但是在iOS手机上解压时,会出现乱码

乱码图:


图片.png

我尝试了在unzip函数里面传入编码UTF-8、US-ASCII、GB18030、GBK等均无效,后来想到读取文件流转编码格式以失败告终。然后各种百度找了两三天,也没见人有说这个库有没有问题,不知道是他们没遇到这种问题还是懒得记录,又或是对于他们简简单单,但是对于一个对某方面不理解的人来说,要解决还是挺费劲,费劲在于没有思路,而知道的,或许只需要一个变量就可以搞定,react-native-zip-archive官网上看issues有个俄罗斯的也出现这样的问题,但是没有说解决办法。
后面查了半天,最后发现一个博主说挺简洁的https://blog.csdn.net/ismilesky/article/details/52767654,尝试改了iOS的原生代码。只改了一个参数,其实并不是这个库有问题,而是苹果系统本身默认的,修改方法如下:

1、全局搜索:SSZipArchive,找到SSZipArchive.m文件,或者你下图中的路径去找SSZipArchive.m文件,找到后双击进去。


图片.png

2、在SSZipArchive.m文件中搜索NSStringEncoding encoding或者kCFStringEncodingDOSLatinUS等字样,反正是关于转编码的地方,因为我不确定不同版本的是不是同一个变量或者字符。
将kCFStringEncodingDOSLatinUS 改为 kCFStringEncodingGB_18030_2000,
如图:


图片.png

然后重新跑就可以了。

修改后正常解压:


图片.png

你可能感兴趣的:(iOS使用react-native-zip-archive解压windows压缩的zip包包含中文等特殊字符乱码解决方法)