性能问答>java.util.zip.ZipFile这个类为什么不支持中文?sun.nio.cs.ArrayDecoder为什么jdk里面的src.zip文件里面没有sun.nio.cs.ArrayDecoder这个类的源码?这个源码证明获取?>
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)

微信截图_20200602145628.png
微信截图_20200602145853.png

第二问题:sun.nio.cs.ArrayDecoder为什么jdk里面的src.zip文件里面没有sun.nio.cs.ArrayDecoder这个类的源码?这个源码证明获取?

非常感谢各位大佬,祝大家工作顺利。

4152 阅读
请先登录,查看5条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步