Ionic本机Zip插件在解压带有俄语名称的zip文件时总是返回“失败”

时间:2018-08-10 10:55:15

标签: android ionic-framework zip unzip

我正在使用Ionic的本机Zip插件,并正在为Android开发一个应用(从https://ionicframework.com/docs/native/zip/开始)。我从服务器下载了一个zip文件,并将其存储在file.externalDataDirectory中。我可以在文件夹中找到它,然后在设备上手动将其解压缩。但是,当我尝试使用插件以编程方式将其解压缩时,它始终返回-1,这意味着它失败了。

这是下面的代码,甚至没有调用progress函数。文件名包含下划线。

this.zip.unzip(this.file.externalDataDirectory + "my_file.zip", this.file.externalDataDirectory, (progress) => console.log('Unzipping, ' + Math.round((progress.loaded / progress.total) * 100) + '%')) .then((result) => { if(result === 0) console.log('SUCCESS'); if(result === -1) console.log('FAILED'); })

我也尝试对路径进行硬编码,但结果是相同的:

this.zip.unzip(" file:///storage/emulated/0/Android/data/com.myapp/my_file.zip", "file:///storage/emulated/0/Android/data/com.myapp/", (progress) => console.log('Unzipping, ' + Math.round((progress.loaded / progress.total) * 100) + '%')) .then((result) => { if(result === 0) console.log('SUCCESS'); if(result === -1) console.log('FAILED'); })

请问有人可以帮我吗?

编辑:我发现仅在zip中的文件名称为俄语时才会出现问题。 zip存档名称本身仅包含数字。

1 个答案:

答案 0 :(得分:0)

好的,所以我想出了解决方案。我已经修改了插件的Java文件,并向构造函数Charset.forName(“ CP1251”)添加了一个charset参数:

ZipInputStream zis = new ZipInputStream(inputStream, Charset.forName("CP1251"));