一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

ZIP文件的解码识别方法、编码修正方法、计算机可读存储介质及系统与流程

2022-06-05 11:58:25 来源:中国专利 TAG:

zip文件的解码识别方法、编码修正方法、计算机可读存储介质及系统
技术领域
1.本发明涉及文档处理技术领域,特别涉及一种zip文件的解码识别方法、编码修正方法、zip文件的解码识别系统及计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现zip文件的解码识别方法和编码修正方法。


背景技术:

2.zip(压缩文件格式)是一种古老的规范,最早出现在ibm的dos系统下,zip属于当前几种主流的压缩格式之一。当年的dos不能像今天这样支持unicode和utf-8编码,不同国家的电脑需要安装不同的代码页(code page),并只能兼容当地(国家/地区)的文字。在这种情况下,简体中文gbk编码、繁体中文big5编码和日文shift-jis编码虽然都含有大量完全一样的汉字,但是因为编码规范不同,同样的汉字却使用了完全不一样的字节编码方式。zip和dos一样,设计初期并没有考虑unicode统一编码的问题,所以压缩时候会按照各个操作系统默认编码存储文件。
3.现如今,随着新的unicode和utf-8编码的兴盛,越来越多的系统开始支持utf-8规范(这是一种可以支持全球所有文字的编码方式)。zip中也增加了新的标志位,用来表示zip文件的压缩编码是否是utf-8。然而,主流操作系统针对zip的压缩功能代码年久失修,很多功能都没有遵从最新的zip标准,不同操作系统的文件系统对编码格式支持不统一。如linux下默认不支持gbk编码;windows操作系统的中文默认编码为gbk,并且至今windows 10依旧采用兼容代码页(code page)的方式判断系统语言,因此windows的zip压缩会使用本地码压缩(默认是gbk编码),而不会开启utf-8标志位,但会使用zip一个特殊的功能“zip拓展文件名字段”,并在拓展字段里使用“utf-8”编码的文件名;而macos操作系统虽然采用中文默认编码utf8,但因为mac的代码页(code page)就是utf-8,所以压缩的时候按照utf-8压缩,且不会开启utf-8标志位。并且,不同操作系统对大/小写文件名识别的方式也不一致,如linux下区分大小写,mac、windows下默认不区分大小写,即:a.txt,a.txt在mac、windows中会被认为是同一个文件;而在linux下则被认为是不同文件。由于文件识别系统无法获知将要解码的zip文件是由哪种系统编码的,也就无法提供与zip文件相匹配的解码方式。不同操作系统中不一致的编码方案给文件识别系统的服务端解码zip并正确识别文件名带来了困难。


技术实现要素:

4.本发明所要解决的技术问题是提供一种zip文件的解码识别和编码修正方法、存储有被执行时实现上述方法的计算机程序的计算机可读存储介质以及包括该存储介质的系统,该方法能识别解码在不同操作系统下建立的zip文件。
5.提供一种zip文件的解码识别方法,包括如下识别步骤:获取zip文件的目录源数据,从所获取的目录源数据中提取文件名数据,识别所提取的文件名数据的编码格式,以识
别到的编码格式作为zip文件的源编码格式来进行zip文件的解码,其特征是,所述提取文件名数据包括拼接多个文件名,在识别所提取的文件名数据的编码格式时,以所述拼接后的多个文件名作为一组识别输入来进行编码格式的识别。
6.优选地,所述拼接多个文件名包括:将所获取的目录源数据中的全部文件名按文件名在目录源数据中的层级顺序进行拼接。
7.优选地,所述识别所提取的文件名数据的编码格式包括编码探测步骤:在预设的编码格式库中对所提取的文件名数据进行匹配探测,若探测到编码格式库中存在与所述文件名数据的匹配度达到预设程度的编码格式,则以该探测到的编码格式作为该zip文件的源编码格式。
8.优选地,所述编码探测步骤采用编码识别工具进行匹配探测,编码识别工具包括universalchardet、iconv字符编码转换、icu字符串编码探测、enca编码转换中的一种或多种。
9.优选地,在所述识别步骤中,所述获取zip文件的目录源数据包括映射转换步骤:为目录源数据中的多个文件名数据建立限制字符映射表,所述提取文件名数据是通过链接引用所述映射表来实现的,所述限制字符包括字母、数字、下划线和连字符中的一种或多种。
10.优选地,在所述映射转换步骤中,为目录源数据中的多个文件名数据建立限制字符映射表是指:获取目录源数据的层级架构,为该层级架构的各个层级的多个文件配置限制字符,构建由这些被配置的限制字符指向其对应的文件的文件名的映射表。
11.优选地,所述配置限制字符包括使用nanoid为各个层级的多个文件分别随机生成基于限制字符的字符串。
12.还提供一种zip文件的编码修正方法,包括标志位确认步骤:读取zip文件的额外头字段,识别所读取的字段是否存在utf-8标志位,若识别结果为不存在则执行如权利要求1~7中任一项所述的zip文件的解码识别方法来获取zip文件编码格式,从而以所获取的编码格式对zip文件进行解码。
13.还提供一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时能够实现上述zip文件的解码识别方法和/或上述zip文件的编码修正方法。
14.还提供一种zip文件的解码识别系统,包括zip文件提取模块和编码格式识别模块,所述zip文件提取模块用于获取zip文件的目录源数据以及从所获取的目录源数据中提取文件名数据,所述编码格式识别模块用于识别所提取的文件名数据的编码格式,还包括处理器,处理器内预先存储有上述计算机可读存储介质,该计算机可读存储介质上的计算机程序可被处理器执行。
15.有益效果:该zip文件的编码修正方法,先通过zip文件的解码识别系统读取zip文件的额外头字段,识别所读取的字段是否存在utf-8标志位,如果识别结果为存在则依据utf-8标志位直接解码,如果识别结果为不存在则执行zip文件的解码识别方法,获取zip文件的目录源数据,从所获取的目录源数据中拼接多个文件名,以拼接后的多个文件名作为一组识别输入来进行编码格式的识别,该解码识别方法以拼接得到的长识别文本作为识别输入得到编码格式,提升了zip文件解码识别的识别准确度。
附图说明
16.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
17.图1是本发明zip文件的解码识别系统的编码识别及修正过程的流程图。
18.图2是一个zip文件的原始层级架构示意图。
19.图3是对图2的zip文件进行直接识别得到的乱码文件的层级架构示意图。
20.图4是本发明zip文件的解码识别系统对图2的zip文件执行映射转换步骤后得到的映射文件的层级架构示意图。
21.图5是图2的zip文件的各个层级的文件名数据展开图。
具体实施方式
22.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
23.实施例一
24.本实施例的zip文件的解码识别系统用于文件服务器的解码服务端,包括zip文件提取模块、编码格式识别模块和解码模块。在解码服务端接收到zip文件后,先对zip文件进行cp437解析编码,然后zip文件的解码识别系统的解码模块执行如图1所示的zip文件的编码修正方法:读取该zip文件的额外头字段(即zip extra-header),识别所读取的字段是否存在utf-8标志位,如果识别结果为存在则解码模块直接对该zip文件进行解码;如果识别结果为不存在,则文件服务器的解码服务端据此获悉zip文件缺失utf-8标志位的信息,解码服务端对此前经cp437解析编码后的文件进行还原,然后通知zip文件的解码识别系统的解码模块执行zip文件的解码识别方法来识别该zip文件的源编码格式,实现对该zip文件的编码修正,并以识别到的zip文件的源编码格式进行解码。
25.以下详述本实施例的zip文件的解码识别方法的工作过程。
26.zip文件的解码识别系统的zip文件提取模块获取zip文件的目录源数据(见图2的zip文件“课件”的原始层级架构),提取所获取数据中的多个文件名数据并拼接获取到的多个文件名,即将所获取的目录源数据中的全部文件名按文件名在目录源数据中的层级顺序自上层往下层依次进行拼接,然后在识别所提取的文件名数据的编码格式时,以拼接后的多个文件名作为一组识别输入来进行编码格式的识别,最后以识别到的编码格式作为zip文件解码的源编码格式进行解码。在实际解码测试中,相较于通用的以各个文件名单独作为识别输入,以多个文件名拼接后得到的长识别文本作为识别输入提升了解码识别的识别准确度,从而提升了解码的准确度。
27.优选地,将所获取的目录源数据中的全部文件名按文件名在目录源数据中的层级顺序自上层往下层依次进行拼接,见图5的zip文件“课件”的各个层级的文件名数据展开图,zip文件“课件”中,zip文件名“课件”在最前,然后依次拼接同一层级的文件名“closure&decorator”和“gitbook”,然后拼接后一层级的文件名“装饰器的使用”、“装饰器”、“index”、“images”、“fonts”、“plugins”、“app”和“style”,然后拼接再下一层级的文
件名“apple

touch

icon-precomposed-152”、“favicon”、“fontawesome”、“fontawesome”、“gitbook-plugin-emphasize”和“gitbook-plugin-fontsettings”,最后拼接最下一层的文件名“fontawesome-webfont”、“fontawesome-webfont.eot”、“plugin”、“buttons”和“website”。或者,改为按照图2中全部层级的文件名展开后的顺序依次拼接,即在zip文件名“课件”后拼接文件夹f11的文件名“closure&decorator”及其下一层级全部文件的文件名“装饰器的使用”、“装饰器”和“index”,然后拼接与文件夹f11同一层级的文件夹f12的文件名“gitbook”及其下全部层级的各个文件夹及其文件的文件名,如文件夹f21的文件名“images”接其下一层级的文件d31、32的文件名“apple

touch

icon-precomposed-152”和“favicon”并以此类推。将全部层级的文件名展开后的顺序依次拼接适用于具备一键展开全部文件名功能的文件服务器的解码服务端,能够加快文件名目录源数据提取速度。
28.优选地,识别所提取的文件名数据的编码格式包括编码探测步骤:探测编码格式类别,若探测到存在匹配度达到预设程度的编码格式,则以该编码格式作为源编码格式进行解码。编码探测步骤采用编码识别工具探测编码格式类别,编码识别工具包括universalchardet、iconv字符编码转换、icu字符串编码探测、enca编码转换,本实施例采用常规的universalchardet编码识别工具。
29.其中,匹配度达到预设程度是指:识别输入与该编码格式的匹配度达到预设值(如80%),如识别到当前识别输入与简体中文gbk编码格式的匹配度达预设值85%,则认为该识别输入为简体中文gbk编码格式;或者,识别输入与该编码格式的匹配度超出其他编码格式匹配度达预设值(如20%),如识别输入与简体中文gbk编码格式、日文shift-jis编码格式和繁体中文big5编码格式的匹配度分别为40%、50%和75%,该识别输入与繁体中文big5编码格式的匹配度超出其他两种编码格式匹配度均达预设值20%以上,则认为当前识别输入为繁体中文big5编码格式。
30.实施例二
31.在对实施例一进行解码测试的过程中,发明人发现存在zip文件无法被识别也无法被删除的情况发明人分析认为是由于直接对文件进行编码识别为系统层的任务,编码识别错误的文件在解码之后可能成为文件名乱码文件,如图2的zip文件名“课件”被识别为图3的乱码“??”而对文件系统造成污染,导致zip文件无法被识别也无法被删除。为此,发明人在实施例一的识别步骤中的获取zip文件的目录源数据步骤中增设映射转换步骤:为目录源数据中的多个文件名建立映射到限制字符的映射表(对zip文件执行映射转换步骤后得到的映射文件的层级架构见图4),具体地,获取目录源数据的层级架构(见图2),使用唯一字符串生成器nanoid为各个层级随机生成字符串从而为该层级架构的各个层级配置限制字符,本实施例中生成的字符串均为十位限制字符,限制字符包括字母、数字、下划线和连字符中的一种或多种,以此构建由各个层级的限制字符字符串指向其文件名的映射表。在执行映射转换步骤后,获取zip文件的目录源数据步骤中提取所获取数据中的文件名数据通过链接引用映射表实现,即在系统层对文件进行编码识别时读取的文件名是经过映射转换步骤处理后得到的限制字符(见图4,zip文件名“e_4kqzsbd4”),然后在应用层通过链接引用映射表得到该限制字符对应的真实文件名(见图2,zip文件名“课件”)并在应用层对该真实文件名进行编码识别,若对真实文件名识别成功则获得zip文件解码的源编码格式,若对真实文件名识别失败则在应用层留下可删除的乱码文件而不影响系统层。该映射转换步
骤通过映射表读取文件名为应用层操作,即便后续编码识别发生错误生成乱码,也可以在应用层直接删除乱码文件,避免文件名乱码文件在系统层污染文件系统。
32.实施例三
33.在实施例一或实施例二的基础上,zip文件提取模块在提取多个文件名数据的过程中,执行文件名筛选步骤:若目录源数据的层级架构为三层及以上,对最下层的多个文件名择一保留。见zip文件的各个层级的文件名数据展开图,在zip文件名“课件”的第三层级有文件夹31“fontawesome”,该文件夹31的下层,即第四层级有两个文件:文件d41“fontawesome-webfont”和文件d42“fontawesome-webfont.eot”,该zip文件提取模块执行文件名筛选步骤保留其中的文件d41的文件名“fontawesome-webfont”而舍弃文件d42的文件名“fontawesome-webfont.eot”,从而缩减拼接后的多个文件名的整体长度。过长的识别输入可能导致编码格式识别过程卡顿或意外错误,因此通过该文件名筛选步骤限制识别输入的长度,可以减少zip文件解码识别的意外错误,提升zip文件解码识别速度。
34.以上所描述的zip文件的解码识别系统实施例仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
35.最后应说明的是:本发明实施例公开的zip文件的解码识别方法和编码修正方法所揭露的仅为本发明较佳实施例而已,仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献