Java 从zipfile读取具有特殊字符的文件

Java 从zipfile读取具有特殊字符的文件,java,stream,zip,Java,Stream,Zip,我的代码从zipfile中读取文件,除了带有特殊字符的文件外,zipfile工作正常。有问题的字符是“è”(参见我的代码fèreèu champenoise) 它抛出一个错误,但未通过异常处理程序: Exception in thread "main" java.lang.NullPointerException at java.util.zip.ZipFile.getInputStream(Unknown Source) at ZipCompare.main(ZipCompar

我的代码从zipfile中读取文件,除了带有特殊字符的文件外,zipfile工作正常。有问题的字符是“è”(参见我的代码fèreèu champenoise)

它抛出一个错误,但未通过异常处理程序:

Exception in thread "main" java.lang.NullPointerException
    at java.util.zip.ZipFile.getInputStream(Unknown Source)
    at ZipCompare.main(ZipCompare.java:56)

有解决方案吗?

我认为您需要指定一种编码,可能是UTF-8。大概是这样的:

 final InputStream in = new InputStreamReader(file1.getInputStream(file1.getEntry(sdoesntwork)), "utf-8");

请确保记住在finally中关闭此选项。

在构造zipfile时,明确指定编码:
file1=new zipfile(sZipFileOld,Charset.forName(“IBM437”)


Zip文件未对特殊字符使用默认UTF-8编码

问题在于
file1。getEntry(SDOESNetwork)
返回null,因为它找不到该条目。 如果您确定此名称正确,请尝试使用:

file1 = new ZipFile(sZipFileOld,StandardCharsets.UTF_8);

它不会通过您的异常处理程序,因为它是另一种类型的异常,会引发Null指针异常,因为找不到该条目。您应该检查文件是如何定义的或使用了哪个字符集定义的。

file1=new ZipFile(sZipFileOld,StandardCharsets.UTF_8)

字符集-用于解码ZIP条目名称和注释的字符集(如果设置了ZIP条目的通用位标志的语言编码位,则忽略该字符集)


如果zip条目及其注释是ASCII,则无需使用这种方式来构造ZipFile。

My java.util.zip.ZipFile类不允许第二个参数。@user1344545是否使用java 7?因为是中的构造函数java7@user1344545然后,您必须按照“非常感谢”中的说明修改
ZipInputStream
。你帮了我的忙。刚刚更新到Java7,构造函数现在有2个参数。我的问题也解决了。很高兴:-)我的java.util.zip.ZipFile类不允许第二个参数。此构造函数仅在java 7中使用。
file1 = new ZipFile(sZipFileOld,StandardCharsets.UTF_8);