5回复
4年前
java.util.zip.ZipFile这个类为什么不支持中文?sun.nio.cs.ArrayDecoder为什么jdk里面的src.zip文件里面没有sun.nio.cs.ArrayDecoder这个类的源码?这个源码证明获取?
java.util.zip.ZipFile这个类为什么不支持中文?
我看了ZipFile类的构造方法,ZipFile类默认就是UTF-8编码的,UTF-8按理来说是可以支持中文的啊。
public ZipFile(File file, int mode) throws IOException {
this(file, mode, StandardCharsets.UTF_8);
}
我追源码追到java.util.zip.ZipCoder类里面的toString方法,发现问题出在sun.nio.cs.ArrayDecoder这个类身上。
环境:JDK1.8_251
源码:
//修改说明UTF-8.zip这个zip文件里面有一个修改说明UTF-8.txt文件,文件名是中文的。
ZipFile zfUtf8 = new ZipFile("D:\\开发\\修改说明UTF-8.zip");
Enumeration<ZipEntry> zipEntryUtf8 = (Enumeration<ZipEntry> )zfUtf8.entries();
while (zipEntryUtf8.hasMoreElements()) {
ZipEntry temp = zipEntryUtf8.nextElement();
System.out.println(temp.getComment());
System.out.println(temp.getName());
}
运行报错:
Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(Unknown Source)
at java.util.zip.ZipFile.getZipEntry(Unknown Source)
at java.util.zip.ZipFile.access$900(Unknown Source)
at java.util.zip.ZipFile$ZipEntryIterator.next(Unknown Source)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(Unknown Source)
at java.util.zip.ZipFile$ZipEntryIterator.nextElement(Unknown Source)
at com.yale.test.io.file.jar.JarFileDemo.main(JarFileDemo.java:37)
第二问题:sun.nio.cs.ArrayDecoder为什么jdk里面的src.zip文件里面没有sun.nio.cs.ArrayDecoder这个类的源码?这个源码证明获取?
非常感谢各位大佬,祝大家工作顺利。
4060 阅读