一种解决文件名乱码问题的ZIP文件解压缩方法技术

技术编号:10756208 阅读:231 留言:0更新日期:2014-12-11 12:38
本发明专利技术提供一种解决文件名乱码问题的ZIP文件解压缩方法,包括以下步骤:根据当前操作系统使用的字符集编码确定目标编码;提取一文件名;根据提取的文件名确定源编码;如源编码与目标编码不相同,则将符合源编码的编码规则的文件名转换为符合目标编码的编码规则的文件名;相同则不转换;使用经转换处理之后的文件名在一存储模块中创建一文件;从ZIP文件中的压缩文件内容源数据区提取文件数据并写入到创建的文件;再重复上述直至ZIP文件中的所有文件都被解压缩完毕。通过对文件名做编码转换,可以将压缩包中的文件的文件名转换为符合目标编码的编码规则的文件名,解决了解压缩ZIP文件时存在的乱码问题。

【技术实现步骤摘要】
一种解决文件名乱码问题的ZIP文件解压缩方法
本专利技术涉及计算机信息处理领域,更具体地说,涉及一种解决文件名乱码问题的ZIP文件解压缩方法。
技术介绍
ZIP格式是一种流行的数据压缩和文档储存的文件格式,通常使用后缀名“.zip”,它的MIME格式为application/zip。除了常见的“.zip”扩展名以外,也还有很多常见的文件使用ZIP压缩格式,例如以“.jar”、“.war”、“.docx”、“.xlxs”、“.pptx”、“.odt”、“.ods”、“.odp”等为扩展名的文件。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7z格式比ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Microsoft从WindowsME操作系统开始内置对ZIP格式的支持,即使用户的电脑上没有安装解压缩软件,也能打开和制作ZIP格式的压缩文件,MACOSX和Linux操作系统也对ZIP格式提供了支持。ZIP是一种分别压缩每个文件的文件格式。分别压缩文件允许不必读取另外的数据而检索独立的文件;理论上,这种格式允许对不同的文件使用不同的算法。不管用何种方法,对这种格式的一个基本原理是,在包含很多小文件的时候,以每个小文件分别存档会明显地比压缩成一个独立的文件占据的存储空间要大。ZIP文件格式支持多种压缩算法,例如Shrinking方法、Reducing系列方法、Imploding方法、Tokenizing方法、Deflate方法、增强的Deflate方法、PKWAREDataCompressionLibraryImploding方法、Bzip2方法等。ZIP的文件格式说明指出文件可以不经压缩或者使用不同的压缩方法来存储。然而,在实际上,ZIP几乎总是在使用卡茨(Katz)的Deflate方法。ZIP支持基于对称加密系统的一个简单的密码,并支持分卷压缩。ZIP文件的结构如下表所示,主要可以分为三大部分:压缩文件内容源数据区、中央目录区、中央目录结束标识区。压缩文件内容源数据区用于记录被压缩的所有文件的内容数据,其数据组织结构是从前向后依次存储每个文件的数据,对于每个文件都由文件头(fileheader)、文件数据(filedata)、数据描述(datadescriptor)三部分组成。文件标头用于存储与文件本身相关的各种信息,其结构如下表所示。紧接着是文件数据,其中存储以相应的压缩算法压缩之后的文件内容。紧接着是数据描述符,用于标识该文件压缩结束,该结构只有在相应的文件标头中通用位标记字段的第3位设为1时才会出现,紧接在压缩文件源数据后。数据描述符只用在不能对输出的ZIP文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的ZIP文件中,如果是磁盘上的ZIP文件一般没有这个数据描述符。中央目录区用于记录被压缩文件的原始目录结构信息。对于待压缩的目录而言,每一个子目录(或文件)对应一个中央目录文件标头,记录该目录的描述信息,其结构如下表所示。中央目录结束标识区存在于整个归档包的结尾,用于标记中央目录的结束,其结构如下表所示。在中央目录文件标头的第46字节处开始的一段数据,是该中央目录文件标头对应的被压缩文件在生成该压缩包的操作系统上的原始文件名,一般采用与原操作系统本地化环境(Locale)相一致的字符集和编码表示。不同的操作系统版本可能使用不同的编码字符集。Windows操作系统采用一种称为代码页(CodePage)的方式指定系统当前所属的使用区域和语言,例如,Windows7操作系统的简体中文版使用名称为“CP936”的代码页,对应的编码字符集是GB系列编码字符集(GB2312、GBK、GB18030),而在目标市场为台湾的繁体中文版使用名称为“CP950”代码页,则对应Big5的编码字符集。Linux操作系统目前大多使用UTF-8系列的本地化环境(Locale),对应的字符集编码是UTF-8。GB2312采用单字节编码兼容ASCII字符集,采用双字节对汉字进行编码,在8位的系统上,两个字节的范围均为0xA1~0xFE。由于编码空间的限制,GB2312仅收录了6763个常用汉字。虽然已经基本覆盖了日常使用的现代汉字,但是随着应用的深入,6763个汉字已经无法满足应用需要,特别是无法满足人名、地名以及古籍整理等用字需要。GBK内码规范是由全国信息标准化技术委员会在《汉字扩展内码规范》中提出的一种两字节代码体系。它在GB2312内码系统的基础上进行了扩充,以0x8140~0xFEFE的矩形区域,剔除0xXX7F一条线的两字节表示CJK汉字字汇及有关的符号,并有所扩充。其中第一字节的范围为0x81~0xFE,第二字节的范围是0x40~0x7E或0x80~0xFE。GB18030沿用GB/GBK的编码体系,并在GBK的基础上进一步进行了扩充,增加了四字节部分的编码,从而使得码位空间大大扩充,上升到150多万个。GB18030编码标准的主要目的是为了解决一些生、偏、难字的问题,以及适应出版、邮政、户政、金融、地理信息系统等迫切需要的人名、地名用字问题,另外一个目的就是推动我国少数民族语言信息化发展的步伐,为少数民族语言的信息化提供标准和助力。GB18030-2000标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分采用使用0x00至0x80码位,兼容ASCII。双字节部分采用两个字节表示一个字符,其首字节码位从0x81~0xFE,尾字节码位分别是0x40~0x7E和0x80~0xFE,兼容GBK和GB2312。四字节部分第一、三字节仍为0x81~0xFE,第二、四字节采用0x30到0x39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0x81308130到0xFE39FE39。GB18030-2000码位范围分配如下表所示。GB2312和GBK编码仅收录了英文字母、数字、汉字、俄文字母等字符,因此,采用GB2312和GBK编码是无法表示全球大多数民族文字如蒙古语、藏语、维吾尔语、泰语、马来语、韩语等语言的文字。GB18030从字汇上是兼容Unicode国际标准的。Unicode是Unicode联盟制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。在Unicode中:汉字“字”对应的数字是23383(十进制),十六进制表示为5B57。在Unicode中,有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32等。例如,“汉字”对应的码点是U+6C49和U+5B57,而编码的程序数据是:●chardata_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8编码●char16_tdata_utf16[]={0x6C49,0x5B57};//UTF-16编码●char32_tdata_utf32[]={0x00006C49,0x00005B57};//UTF-32编码UTF-8以字节为本文档来自技高网...
一种解决文件名乱码问题的ZIP文件解压缩方法

【技术保护点】
一种解决文件名乱码问题的ZIP文件解压缩方法,包括以下步骤:A.通过一系统信息检测模块根据当前操作系统使用的字符集编码确定目标编码;B.通过一解压缩模块从ZIP文件中的中央目录区提取一文件名;C.通过一编码识别模块根据提取的文件名确定源编码;D.如源编码与目标编码不相同,通过一编码转换模块将符合源编码的编码规则的文件名转换为符合目标编码的编码规则的文件名;如源编码与目标编码相同则不转换;E.通过一解压缩模块使用经步骤D处理之后的文件名在一存储模块中创建一文件;F.通过解压缩模块从ZIP文件中的压缩文件内容源数据区提取文件数据并写入到由步骤E创建的文件;G重复步骤B~步骤F直至ZIP文件中的所有文件都被解压缩完毕。

【技术特征摘要】
1.一种解决文件名乱码问题的ZIP文件解压缩方法,包括以下步骤:A.通过一系统信息检测模块根据当前操作系统使用的字符集编码确定目标编码;B.通过一解压缩模块从ZIP文件中的中央目录区提取一文件名;C.通过一编码识别模块根据提取的文件名确定源编码;D.如源编码与目标编码不相同,通过一编码转换模块将符合源编码的编码规则的文件名转换为符合目标编码的编码规则的文件名;如源编码与目标编码相同则不转换;E.通过一解压缩模块使用经步骤D处理之后的文件名在一存储模块中创建一文件;F.通过解压缩模块从ZIP文件中的压缩文件内容源数据区提取文件数据并写入到由步骤E创建的文件;G重复步骤B~步骤F直至ZIP文件中的所有文件都被解压缩完毕。2.如权利要求1所述的方法,其特征在于,所述步骤A中确定目标编码的依据是:如当前操作系统是Windows操作系统并且本地化环境是CP936,则目标编码为GB18030编码;如当前操作系统是Unix、Linux、Android、iOS及MacOS之一的操作系统,则目标编码为UTF-8编码。3.如权利要求1所述的方法,其特征在于,所述步骤C中根据文件名确定源编码的依据是:如果文件名符合UTF-8的编码规则,则源编码是UTF-8编码;如果文件名符合GB18030的编码规则,则源编码是GB18030编码;否则,将目标编码作为源编码。4.如权...

【专利技术属性】
技术研发人员:刘汇丹诺明花吴健芮建武贺也平刘奎恩
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1