在Android中以编程方式解压缩带有阿拉伯名称的文件

时间:2019-06-06 11:29:43

标签: java android zip rar

我有一个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;
    }

1 个答案:

答案 0 :(得分:1)

尝试

new ZipInputStream(new BufferedInputStream(is), Charset.forName("Windows-1256"));

默认为UTF-8,显然不起作用。


反馈后: 显然存在一些Android API版本问题。

您可以检查:

filename = ze.getName();

有时可以“修补”编码。容易出错,甚至不可行。

filename = new String(filename.getBytes("..."), "...");

人们可以尝试不同的编码方式:

  • Windows-1256
  • UTF-8

(特别是将转换为 UTF-8可能会引起转换错误,因为UTF-8要求字节对多字节序列具有特定的位模式。)