Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ZipEntry文件名编码?_Android - Fatal编程技术网

Android ZipEntry文件名编码?

Android ZipEntry文件名编码?,android,Android,我找不到任何关于zip文件中文件名编码的文档 我必须将带有德语umlauts的文件名打包到一个zip文件中,然后将其加载到一个安卓系统中,然后在那里解包。然后我必须引用这些文件,这些文件的名称存储在另一个文件中。后者是UTF-8,因此umlauts没有问题。但我需要确保,解压后的文件在安卓系统上解压后有正确的名称 目前,我正在使用Windows7上的InfoZip来打包存档,Android上的API函数来解包,一切都正常。但是,如果我使用javasdk或7z中的jar进行打包,那么这些文件在An

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

我必须将带有德语umlauts的文件名打包到一个zip文件中,然后将其加载到一个安卓系统中,然后在那里解包。然后我必须引用这些文件,这些文件的名称存储在另一个文件中。后者是UTF-8,因此umlauts没有问题。但我需要确保,解压后的文件在安卓系统上解压后有正确的名称

目前,我正在使用Windows7上的InfoZip来打包存档,Android上的API函数来解包,一切都正常。但是,如果我使用javasdk或7z中的jar进行打包,那么这些文件在Android上会出现错误的名称。这让我想知道,是否有任何合适的解决方案(除了只使用古老的ASCII文件名)

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


感谢您的时间,RG

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

我找到了一个解决办法

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上生成ZIP和阅读内容

对于从Windows(比如)到Android的传输,您可以使用jar从JDK进行压缩和解压缩。信息压缩不工作


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

这当然不是解决方案,而是一种变通方法。事实上,我在Android文档中发现,Java中的文件名在发送到系统之前会转换为utf-8字节序列,反之亦然。这允许在Android中一致使用unicode文件名。唯一的问题是,如何使用zip文件将这些文件从windows传输到windows。我一分钟前搜索过这个,我发现了错误条目——这个问题是众所周知的,也是很老的问题:我想你会有以下选择之一:1)等待错误被修复,等待Android赶上2)使用你自己的ZIP实现,不使用UTF-8 3)现在坚持使用ASCII字符4)向你的用户推荐更好的操作系统;-)