从其它平台迁移而来
Lazarus
压缩/解压zip文件
可以使用Zipper
单元中的TZipper
/TUnZipper
类来实现,但是在有中文文件名时需要注意,否则会出现乱码。
压缩
TZipper
的Zip
类方法无需创建实例即可直接生成zip压缩文件。
TZipper
实例的ZipFile
方法是压缩一个指定的文件生成zip压缩文件,ZipFiles
方法是压缩多个指定的文件生成zip压缩文件,UnZipAllFiles
方法是配合Entries
等属性生成zip压缩文件。
解压
TUnZipper
的UnZip
类方法无需创建实例即可直接解压zip文件。
TUnZipper
实例的UnZipFile
方法是解压出一个指定的文件,UnZipFiles
方法是解压出多个指定的文件,UnZipAllFiles
方法可以从zip文件中解压出所有文件。
乱码
无中文文件名的情况下,以上类方法和实例方法使用都是正常的,与其它压缩/解压工具交叉使用也不会出现问题。
当存在中文文件名时,成对使用以上压缩/解压方法,从结果上来说是没什么问题的,但与其它压缩/解压工具交叉使用时就会出现文件名乱码问题。
乱码其实还是字符编码的问题,Lazarus
默认使用UTF8
编码,windows
默认使用OEM对应的编码,对于中文windows
就是GBK
编码,于是就出问题了。
解决方案
TZipper
有UseLanguageEncoding
属性,TUnZipper
有UseUTF8
属性,均设置为True
,再进行压缩/解压即可,因此,类方法是肯定不行的了。
不过,这两个属性在语意上却十分让人费解,因为属性为False
时,zip文件头里的文件名实际使用的是UTF8
编码,而当属性为True
时,zip文件头里的文件名实际使用的却是GBK
编码,搞不懂这些老外的想法。
对了,好像要使用FPC 3.2.0+
的编译器版本才可以。