Ionic 本机 Zip 插件在解压缩具有俄语名称的 zip 文件时始终 returns "Failed"
Ionic native Zip plugin always returns "Failed" while decompressing the zip file with Russian name
我正在使用 Ionic 的本机 Zip 插件并为 Android 开发一个应用程序(从这里 https://ionicframework.com/docs/native/zip/)。我从服务器下载一个 zip 文件并将其存储在 file.externalDataDirectory 中。我可以在文件夹中找到它并在我的设备上手动解压缩。但是当我尝试使用插件以编程方式解压缩它时,它总是 returns -1,这意味着它失败了。
下面是我的代码,连进度函数都没有调用。文件名包含下划线。
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 存档名称本身仅包含数字。
好的,所以我找到了解决方案。我修改了插件的 Java 文件并向构造函数添加了一个字符集参数 Charset.forName("CP1251"):
ZipInputStream zis = new ZipInputStream(inputStream, Charset.forName("CP1251"));
我正在使用 Ionic 的本机 Zip 插件并为 Android 开发一个应用程序(从这里 https://ionicframework.com/docs/native/zip/)。我从服务器下载一个 zip 文件并将其存储在 file.externalDataDirectory 中。我可以在文件夹中找到它并在我的设备上手动解压缩。但是当我尝试使用插件以编程方式解压缩它时,它总是 returns -1,这意味着它失败了。
下面是我的代码,连进度函数都没有调用。文件名包含下划线。
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 存档名称本身仅包含数字。
好的,所以我找到了解决方案。我修改了插件的 Java 文件并向构造函数添加了一个字符集参数 Charset.forName("CP1251"):
ZipInputStream zis = new ZipInputStream(inputStream, Charset.forName("CP1251"));