ZipEntry文件名编码?

时间:2010-11-03 08:40:41

标签: android

我找不到有关zip文件中文件名编码的任何文档。

我必须将带有德语变音符号的文件名打包成一个zip,然后将其加载到Android中并在那里解压缩。然后我必须使用存储在另一个文件中的名称来引用这些文件。后者是UTF-8,因此变音符号没有问题。但我需要确保解压后的文件在Android上解压后具有正确的名称。

目前,我在Windows 7上使用info-zip打包存档,并在Android上解压缩API函数,一切正常。但是,如果我使用Java SDK或7z中的jar进行打包,则Android上的文件名称错误。这让我想知道,如果有任何适当的解决方案(除了仅使用古老的ASCII文件名)。

我认为Android使用Unicode文件名,所以我所要做的就是强制拉链程序用Unicode编码文件名。这可能吗?

感谢您的时间,RG

2 个答案:

答案 0 :(得分:1)

我找到了解决方法。

public static String iso (String s)
    {
        byte bytes[]=EncodingUtils.getBytes(s,"iso-8859-1");
        return new String(bytes);
    }

此函数将ISO-8859-1字符串转换为Java Unicode字符串。您可以将此应用于从ZipEntry.getName()获得的文件名,并使用它来存储文件。这使您可以生成拉链并阅读Android上的内容。

对于从Windows(例如)到Android的传输,您可以使用JDK中的jar进行压缩和解压缩。 Info-zip不起作用!

这是一个非常酷的解决方案,但对于日语字符或ISO-8859-1之外的任何内容都会失败。不知道该怎么做。

答案 1 :(得分:0)

上次我检查SD卡时有一个ISO8859-1的字符集,没有UTF-8。这是为了与Windows系统兼容。我想你必须将Java Unicode字符串转换为ISO8859-1。但我认为最好的解决方案是仅使用ASCII字符。