我最近写了一个zip文件名为I / O库zipzap ,但我从任意zip文件正确解码压缩项的文件名中挣扎。
现在, PKWARE规格规定:
D.1 ZIP格式历来只支持原IBM PC的字符编码集,通常被称为IBM代码页437 ...
D.2如果通用11位没有设置,文件名和评论应符合原ZIP字符编码。 如果通用11位被设置,文件名和注释必须支持Unicode标准,版本4.1.0或使用由UTF-8存储规范中定义的字符编码形式更大...
这意味着符合zip文件编码的文件名作为CP437,除非EFS位被置位,在这种情况下,文件名是UTF-8。
不幸的是,似乎很多的压缩工具,要么不正确设置EFS位(如Mac的CLI,GUI ZIP)或使用其他的编码,通常默认的系统之一(例如WinZip的?)。 如果你知道怎样的WinZip,7-ZIP,信息-ZIP,PKZIP,Java的JAR / ZIP,ZIP .NET,dotnetzip等编码文件名和他们设置字段的“由国产版” 拉拉链时,请告诉我。
具体而言,信息-Zip的尝试这个解压时:
- 文件系统= MS-DOS(0)=> CP437
- 不同的是:版本= 2.5,2.6,4.0 => ISO 8859-1
- 文件系统= HPFS(6)=> CP437
- 文件系统= NTFS(10)和版本= 5.0 => CP437
- 否则,ISO 8859-1
如果我想支持从任意的zip文件检查或提取,并在没有EFS标志的文件名编码一个合理的尝试 ,我可以看看?