Java 从zipfile读取具有特殊字符的文件
我的代码从zipfile中读取文件,除了带有特殊字符的文件外,zipfile工作正常。有问题的字符是“è”(参见我的代码fèreèu champenoise) 它抛出一个错误,但未通过异常处理程序: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
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);