我有一个Android应用程序,可以下载压缩文件,然后将其解压缩..
它与英文名称文件一起正常工作。
但是如果文件名为阿拉伯文,则会导致错误格式
E/UncaughtException: java.lang.IllegalArgumentException: MALFORMED[1]
这是我的代码。
感谢您的帮助
谢谢
private boolean unpackZip(String path, String zipname)
{
InputStream is;
ZipInputStream zis;
try
{
String filename;
is = new FileInputStream(path + zipname);
zis = new ZipInputStream(new BufferedInputStream(is));
ZipEntry ze;
byte[] buffer = new byte[1024];
int count;
while ((ze = zis.getNextEntry()) != null)
{
filename = ze.getName();
// Need to create directories if not exists, or
// it will generate an Exception...
if (ze.isDirectory()) {
File fmd = new File(path + filename);
fmd.mkdirs();
continue;
}
FileOutputStream fout = new FileOutputStream(path + filename);
while ((count = zis.read(buffer)) != -1)
{
fout.write(buffer, 0, count);
}
fout.close();
zis.closeEntry();
}
zis.close();
}
catch(IOException e)
{
e.printStackTrace();
return false;
}
return true;
}
答案 0 :(得分:1)
尝试
new ZipInputStream(new BufferedInputStream(is), Charset.forName("Windows-1256"));
默认为UTF-8,显然不起作用。
反馈后: 显然存在一些Android API版本问题。
您可以检查:
filename = ze.getName();
有时可以“修补”编码。容易出错,甚至不可行。
filename = new String(filename.getBytes("..."), "...");
人们可以尝试不同的编码方式:
(特别是将转换为 UTF-8可能会引起转换错误,因为UTF-8要求字节对多字节序列具有特定的位模式。)