gpt4 book ai didi

android - 从 API24 向上解压缩文件名中包含特殊字符的文件

转载 作者:搜寻专家 更新时间:2023-11-01 09:37:37 25 4
gpt4 key购买 nike

我有一个应用程序可以解压缩一个 zip 文件,其中包含许多具有不同名称的文件。 Zipfile 中的某些文件具有特殊字符。

到目前为止,解压缩适用于所有使用 API 23 及更低版本的设备。

使用 API 24 和 API 25 可以解压一些文件,但在解压特定文件(名称)时出现 Zip 格式错误错误 -> battle of chÔteau_thierry (1814).jpa(有一个特殊的字符 Ô in它)

如何在不操作 zip 的情况下解压缩具有特殊字符的文件。我的意思是它已经适用于小于 24 的 API。

有人可以帮助我吗?

        ZipFile zipFile = new ZipFile(zipname);
Enumeration enumeration = zipFile.entries();

while (enumeration.hasMoreElements()) {

ZipEntry zipEntry = null;
zipEntry = (ZipEntry) enumeration.nextElement(); <----- Craches, when it comes to the file : battle of chÔteau_thierry (1814).jpa
String sName = zipEntry.getName();
}

* 更新 *

压缩文件链接: https://drive.google.com/file/d/0BzTzuiIaUzqkd3loR2dPdW03T28/view?usp=sharing

您必须将文件下载到本地,因为 google drive 会隐式转换文件名。 (battle of chateau_thierry (1814).jpa,法语)您只能在本地 zip 文件中看到字符 Ô。

Stacktrace,我只获得 API 24 和 25 设备:

Hint : java.lang.IllegalArgumentException: MALFORMED[1]
at java.util.zip.ZipCoder.toString(ZipCoder.java:65)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:548)
at java.util.zip.ZipFile.-wrap2(ZipFile.java)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:530)
at java.util.zip.ZipFile$1.nextElement(ZipFile.java:508)
at solveraapps.chronicbrowser.ChronicBrowser.unzipImages(ChronicBrowser.java:8011)
at solveraapps.chronicbrowser.ChronicBrowser$16.run(ChronicBrowser.java:8442)

最佳答案

我现在很高兴地解决了它,我希望我也能帮助投票者?

有关 ZipFile 的 API 已从 Nougat 更改。从 24 开始,您可以在构造 ZipFile 时指定一个 CharSet :

ZipFile(String name, Charset charset) // Charset only when >=24

在 Docu 中它说:

The UTF-8 charset is used to decode the entry names and comments

所以我的编码解决方案是将正确的字符集设置为“ISO-8859-1”:

@TargetApi(24)
public void myUnzipper(){

ZipFile zipFile = null;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ // N for Nougat
zipFile = new ZipFile(zipname,Charset.forName("ISO-8859-1"));
}else{
zipFile = new ZipFile(zipname);
}

while (enumeration.hasMoreElements()) {

ZipEntry zipEntry = null;
zipEntry = (ZipEntry) enumeration.nextElement(); <----- Craches, when it comes to the file : battle of chÔteau_thierry (1814).jpa
String sName = zipEntry.getName();
}

}

关于android - 从 API24 向上解压缩文件名中包含特殊字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com