首页> 中国专利> 对混杂多编码字符文本进行统一编码转换的方法及装置

对混杂多编码字符文本进行统一编码转换的方法及装置

摘要

本发明提供了一种对混杂多编码字符文本进行统一编码转换的方法及装置,该方法为:将指针置于待处理文本对应的文件头;获取指针当前所指向的字节;若指针当前所指向的字节小于第一值,将指针加1,当指针未移动至待处理文本的文件尾时,返回执行获取指针当前所指向的字节这一步骤;若指针当前所指向的字节不小于第一值,通过启用第一识别转换模式识别待处理文本的待处理字符串段落的当前编码规则并将其转换为目标编码规则,或者,通过启用第二识别转换模式识别待处理文本的字符的当前编码规则并将其转换为目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

著录项

  • 公开/公告号CN113836869A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 中国农业银行股份有限公司;

    申请/专利号CN202111105610.4

  • 发明设计人 丁杨;孔亮;

    申请日2021-09-22

  • 分类号G06F40/151(20200101);G06F40/126(20200101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人李慧慧

  • 地址 100005 北京市东城区建国门内大街69号

  • 入库时间 2023-06-19 13:49:36

说明书

技术领域

本发明涉及数据处理技术领域,具体涉及一种对混杂多编码字符文本进行统一编码转换的方法及装置。

背景技术

在上下游异构应用系统中,通常是以文本文件作为大批量数据传输的载体,故能够准确识别文本文件的编码,对数据传输的准确性尤其重要。但是在实际生产中,由于上游应用系统的输入控制不规范,会导致文本文件的字段编码格式不统一,文本文件中,部分字段为汉字内码扩展规范(Chinese Internal Code Specification,GBK)编码,部分字段为8位元(Universal Character Set/Unicode Transformation Format,UTF-8)编码,此种情况会影响下游应用系统的数据导入和数据分析。

因此,如何对混杂多编码字符文本进行统一编码转换,是现如今亟需待解决的问题。

发明内容

有鉴于此,本发明实施例提供一种对混杂多编码字符文本进行统一编码转换的方法及装置,以对混杂多编码字符文本进行统一编码转换。

为实现上述目的,本发明实施例提供如下技术方案:

本发明实施例第一方面公开一种对混杂多编码字符文本进行统一编码转换的方法,所述方法包括:

将指针置于待处理文本对应的文件头;

获取所述指针当前所指向的字节;

若所述指针当前所指向的字节小于第一值,将所述指针加1,当所述指针未移动至所述待处理文本的文件尾时,返回执行获取所述指针当前所指向的字节这一步骤;

在启用第一识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用预设的映射哈希表和第二值,对所述待处理文本的待处理字符串段落进行编码规则的识别,确定所述待处理字符串段落的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,所述待处理字符串段落的当前编码规则为第一编码规则或第二编码规则;

在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用所述映射哈希表和所述第二值,对所述待处理文本的字符进行编码规则的识别,确定所述待处理文本的字符的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,所述待处理文本的字符的当前编码规则为第一编码规则或第二编码规则;

返回执行获取所述指针当前所指向的字节这一步骤,直至所述指针移动至所述文件尾;

其中,所述映射哈希表包含:每个字符所对应的所述第一编码规则的编码值,每个字符所对应的所述第二编码规则的编码值,及每个字符所对应的优先级。

优选的,在启用第一识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用预设的映射哈希表和第二值,对所述待处理文本的待处理字符串段落进行编码规则的识别,确定所述待处理字符串段落的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,包括:

在启用第一识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,确定所述指针当前所指向的字节为所述待处理文本的待处理字符串段落的起始字节;

若所述起始字节的高四位不为第二值,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;

若所述起始字节的高四位为所述第二值,执行以下步骤确定所述处理字符串段落的当前编码规则;

将所述当前编码规则转换为目标编码规则;

所述以下步骤包括:

以第二编码规则识别所述指针当前所指向的字节对应的字符,累加所识别的字符的第一个数,并基于映射哈希表确定所识别的字符的第一优先级,将所述指针加3;

若所述指针当前所指向的字节小于所述第一值,根据所述第一个数和所有所述第一优先级,计算第一平均优先级;

若所述指针当前所指向的字节不小于所述第一值、高四位为所述第二值及所述第一个数超过阈值,根据所述第一个数和所有所述第一优先级,计算所述第一平均优先级;

若所述指针当前所指向的字节不小于所述第一值且高四位不为所述第二值,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;

若所述指针所指向的字节不小于所述第一值、高四位为所述第二值及所述第一个数未超过所述阈值,返回执行以第二编码规则识别所述指针当前所指向的字节对应的字符这一步骤;

在计算得到所述第一平均优先级后,将所述指针移动至所述起始字节处;

以第一编码规则识别所述指针当前所指向的字节对应的字符,累加所识别的字符的第二个数,并基于所述映射哈希表确定所识别的字符的第二优先级,将所述指针加2;

若所述指针当前所指向的字节不小于所述第一值且所述第二个数未超过所述阈值,返回执行以第一编码规则识别所述指针当前所指向的字节对应的字符这一步骤;

若所述指针当前所指向的字节小于所述第一值或所述第二个数超过所述阈值,根据所有所述第二优先级和所述第二个数,计算第二平均优先级;

当所述第二平均优先级大于所述第一平均优先级时,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;

当所述第一平均优先级大于所述第二平均优先级时,确定所述待处理字符串段落的当前编码规则为所述第二编码规则,将所述指针循环加3,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处。

优选的,所述在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用所述映射哈希表和所述第二值,对所述待处理文本的字符进行编码规则的识别,确定所述待处理文本的字符的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,包括:

在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值且高四位不为第二值,以第一编码规则确定以所述指针当前所指向的字节为开头字节的第一字符,并基于映射哈希表确定所述第一字符的第三优先级;

当所述第三优先级不为0时,确定所述第一字符的当前编码规则为第一编码规则,并将所述第一字符的当前编码规则转换为目标编码规则,将所述指针加2;

当所述第三优先级为0时,对所述第一字符不执行任何操作,将所述指针加1;

在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值且高四位为所述第二值,以第一编码规则确定由所述指针当前所指向的字节及其后面一个字节组成的第二字符,并基于所述映射哈希表确定所述第二字符的第四优先级;以第二编码规则确定由所述指针当前所指向的字节及其后面两个字节组成的第三字符,并基于所述映射哈希表确定所述第三字符的第五优先级;

若所述第四优先级大于所述第五优先级,确定所述第二字符的当前编码规则为所述第一编码规则,并将所述第二字符的当前编码规则转换为所述目标编码规则,将所述指针加2;

若所述第五优先级大于所述第四优先级,确定所述第三字符的当前编码规则为所述第二编码规则,并将所述第三字符的当前编码规则转换为所述目标编码规则,将所述指针加3;

若所述第四优先级等于所述第五优先级,对所述第二字符和所述第三字符不执行任何操作,将所述指针加1。

优选的,所述第一编码规则为汉字内码扩展规范GBK编码规则,所述第二编码规则为8位元UTF-8编码规则。

优选的,所述第一值为十六进制的0x81,所述第二值为二进制的1110。

本发明实施例第二方面公开一种对混杂多编码字符文本进行统一编码转换的装置,所述装置包括:

设置单元,用于将指针置于待处理文本对应的文件头;

获取单元,用于获取所述指针当前所指向的字节;

第一处理单元,用于若所述指针当前所指向的字节小于第一值,将所述指针加1,当所述指针未移动至所述待处理文本的文件尾时,返回执行所述获取单元;

第二处理单元,用于在启用第一识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用预设的映射哈希表和第二值,对所述待处理文本的待处理字符串段落进行编码规则的识别,确定所述待处理字符串段落的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,返回执行所述获取单元直至所述指针移动至所述文件尾,所述待处理字符串段落的当前编码规则为第一编码规则或第二编码规则;

第三处理单元,用于在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,利用所述映射哈希表和所述第二值,对所述待处理文本的字符进行编码规则的识别,确定所述待处理文本的字符的当前编码规则并将其转换为目标编码规则,将所述指针进行移动,返回执行所述获取单元直至所述指针移动至所述文件尾,所述待处理文本的字符的当前编码规则为第一编码规则或第二编码规则;

其中,所述映射哈希表包含:每个字符所对应的所述第一编码规则的编码值,每个字符所对应的所述第二编码规则的编码值,及每个字符所对应的优先级。

优选的,所述第二处理单元包括:

确定模块,用于在启用第一识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值,确定所述指针当前所指向的字节为所述待处理文本的待处理字符串段落的起始字节;

处理模块,用于若所述起始字节的高四位不为第二值,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;若所述起始字节的高四位为所述第二值,执行以下步骤确定所述处理字符串段落的当前编码规则;将所述当前编码规则转换为目标编码规则;

所述以下步骤包括:

以第二编码规则识别所述指针当前所指向的字节对应的字符,累加所识别的字符的第一个数,并基于映射哈希表确定所识别的字符的第一优先级,将所述指针加3;

若所述指针当前所指向的字节小于所述第一值,根据所述第一个数和所有所述第一优先级,计算第一平均优先级;

若所述指针当前所指向的字节不小于所述第一值、高四位为所述第二值及所述第一个数超过阈值,根据所述第一个数和所有所述第一优先级,计算所述第一平均优先级;

若所述指针当前所指向的字节不小于所述第一值且高四位不为所述第二值,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;

若所述指针所指向的字节不小于所述第一值、高四位为所述第二值及所述第一个数未超过所述阈值,返回执行以第二编码规则识别所述指针当前所指向的字节对应的字符这一步骤;

在计算得到所述第一平均优先级后,将所述指针移动至所述起始字节处;

以第一编码规则识别所述指针当前所指向的字节对应的字符,累加所识别的字符的第二个数,并基于所述映射哈希表确定所识别的字符的第二优先级,将所述指针加2;

若所述指针当前所指向的字节不小于所述第一值且所述第二个数未超过所述阈值,返回执行以第一编码规则识别所述指针当前所指向的字节对应的字符这一步骤;

若所述指针当前所指向的字节小于所述第一值或所述第二个数超过所述阈值,根据所有所述第二优先级和所述第二个数,计算第二平均优先级;

当所述第二平均优先级大于所述第一平均优先级时,确定所述待处理字符串段落的当前编码规则为第一编码规则,将所述指针循环加2,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处;

当所述第一平均优先级大于所述第二平均优先级时,确定所述待处理字符串段落的当前编码规则为所述第二编码规则,将所述指针循环加3,直至所述指针所指向的字节小于所述第一值,确定已将所述指针移动至所述待处理字符串段落的终止字节处。

优选的,所述第三处理单元包括:

第一处理模块,用于在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值且高四位不为第二值,以第一编码规则确定以所述指针当前所指向的字节为开头字节的第一字符,并基于映射哈希表确定所述第一字符的第三优先级;当所述第三优先级不为0时,确定所述第一字符的当前编码规则为第一编码规则,并将所述第一字符的当前编码规则转换为目标编码规则,将所述指针加2;当所述第三优先级为0时,对所述第一字符不执行任何操作,将所述指针加1;

第二处理模块,用于:在启用第二识别转换模式的情况下,若所述指针当前所指向的字节不小于所述第一值且高四位为所述第二值,以第一编码规则确定由所述指针当前所指向的字节及其后面一个字节组成的第二字符,并基于所述映射哈希表确定所述第二字符的第四优先级;以第二编码规则确定由所述指针当前所指向的字节及其后面两个字节组成的第三字符,并基于所述映射哈希表确定所述第三字符的第五优先级;

若所述第四优先级大于所述第五优先级,确定所述第二字符的当前编码规则为所述第一编码规则,并将所述第二字符的当前编码规则转换为所述目标编码规则,将所述指针加2;

若所述第五优先级大于所述第四优先级,确定所述第三字符的当前编码规则为所述第二编码规则,并将所述第三字符的当前编码规则转换为所述目标编码规则,将所述指针加3;

若所述第四优先级等于所述第五优先级,对所述第二字符和所述第三字符不执行任何操作,将所述指针加1。

优选的,所述第一编码规则为汉字内码扩展规范GBK编码规则,所述第二编码规则为8位元UTF-8编码规则。

优选的,所述第一值为十六进制的0x81,所述第二值为二进制的1110。

基于上述本发明实施例提供的一种对混杂多编码字符文本进行统一编码转换的方法及装置,该方法为:将指针置于待处理文本对应的文件头;获取指针当前所指向的字节;若指针当前所指向的字节小于第一值,将指针加1,当指针未移动至待处理文本的文件尾时,返回执行获取指针当前所指向的字节这一步骤;若指针当前所指向的字节不小于第一值,通过启用第一识别转换模式识别待处理文本的待处理字符串段落的当前编码规则并将其转换为目标编码规则,或者,通过启用第二识别转换模式识别待处理文本的字符的当前编码规则并将其转换为目标编码规则。对于使用多种编码规则进行编码的文本,根据实际情况选择相应的识别转换模式,从不同维度识别文本的各部分内容的当前编码规则并将其转换为统一的目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种对混杂多编码字符文本进行统一编码转换的方法流程图;

图2为本发明实施例提供的识别并转换待处理字符串段落的当前编码规则的流程图;

图3为本发明实施例提供的识别并转换待处理字符串段落的当前编码规则的另一流程图;

图4为本发明实施例提供的识别并转换待处理文本的字符的当前编码规则的流程图;

图5为本发明实施例提供的识别并转换待处理文本的字符的当前编码规则的另一流程图;

图6为本发明实施例提供的一种对混杂多编码字符文本进行统一编码转换的装置的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

由背景技术可知,在上下游异构应用系统中,由于上游应用系统的输入控制不规范,会导致文本文件的字段编码格式不统一,文本文件中,部分字段为汉字内码扩展规范(Chinese Internal Code Specification,GBK)编码,部分字段为8位元(UniversalCharacter Set/Unicode Transformation Format,UTF-8)编码,此种情况会影响下游应用系统的数据导入和数据分析。因此,如何对混杂多编码字符文本进行统一编码转换,是现如今亟需待解决的问题。

故,本发明实施例提供一种对混杂多编码字符文本进行统一编码转换的方法及装置,对于使用多种编码规则进行编码的文本,根据实际情况选择相应的识别转换模式,从不同维度识别文本的各部分内容的当前编码规则并将其转换为统一的目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

需要说明的是,为更方便理解以下本发明实施例中所涉及的内容,通过以下内容先对字节和字符的基本概率进行简单的介绍。

字节:为计算机的信息存储单元,每个字节包含8个bit,每个bit的取值为0或1。

字符:每个字符为一个文字符号,例如一个汉字、一个英文字母和第一个标点符号均为一个字符,每个字符在存储时需用一个或多个字节来表示。可以理解的是,对于某个字符,若该字符采用GBK编码规则进行编码,则该字符需用2个字节表示,例如:“一”采用GBK编码规则进行编码时可表示为十六进制的“D2BB”(也就是GBK编码值),其中D2为高字节,BB为低字节;若该字符采用UTF-8编码规则进行编码,则该字符需用3个字节表示,例如:“一”采用UTF-8编码规则进行编码时可表示为十六进制的“E4B880”(也就是UTF-8编码值),E4、B8和80为构成该字符的3个字节。

进一步需要说明的是,本发明实施例所提供的一种对混杂多编码字符文本进行统一编码转换的方法及装置,可用于对指定类型的字符的编码规则进行识别,例如对中文字符的编码规则进行识别。

发明人经反复研究和验证发现,字符在利用GBK编码规则进行编码后(此时该字符可称为GBK字符),GBK字符的高字节只可能大于或等于0x81(0x表示十六进制);字符在利用UTF-8编码规则进行编码后(此时该字符可称为UTF-8字符),当该字符为中文字符时,所对应的UTF-8字符只可能是3字节,且第一个字节的高4位只可能是二进制的1110(也就是十六进制的E)。本发明实施例所提供的一种对混杂多编码字符文本进行统一编码转换的方法及装置,是基于前述发明人研究和验证的结果来对文本的各部分的编码规则进行识别的,具体如何识别编码规则详见以下实施例所示出的内容。

参见图1,示出了本发明实施例提供的一种对混杂多编码字符文本进行统一编码转换的方法流程图,该方法包括:

步骤S101:将指针置于待处理文本对应的文件头。

可以理解的是,待处理文本为需要识别编码规则的字符文本文件。

在具体实现步骤S101的过程中,在开始对待处理文本进行编码规则的识别时,将指针移动至该待处理文本对应的文件头处。

步骤S102:获取指针当前所指向的字节。

在具体实现步骤S102的过程中,获取指针当前指向的字节,将该字节用于以下步骤中。

步骤S103:确定指针当前所指向的字节是否小于第一值。若指针当前所指向的字节小于第一值,执行步骤S104和步骤S105;若指针当前所指向的字节不小于(也就是大于或等于)第一值,执行步骤S106或步骤S107。

在一些具体实施例中,以下所涉及的内容中,第一编码规则为GBK编码规则,第二编码规则为UTF-8编码规则,第一值为十六进制的0x81,第二值为二进制的1110。

由上述关于发明人研究和验证的内容可知,无论是GBK字符还是UTF-8字符,GBK字符和UTF-8字符的首字节均大于或等于0x81。因此在每次获取得到指针当前所指向的字节时,可先判断所获取的指针当前所指向的字节是否大于或等于0x81,如果该字节小于0x81则表示该字节为ASCII字符,对ASCII字符不做处理,如果该字节大于或等于0x81则利用该字节进行后续处理。

在具体实现步骤S103的过程中,确定指针当前所指向的字节是否小于第一值,也就是确定指针当前所指向的字节是否小于0x81。若指针当前所指向的字节小于0x81,则将指针加1(也就是将指针移动至下一字节);若指针当前所指向的字节大于或等于第一值,执行步骤S106以第一识别转换模式来进行编码规则的识别,或者,执行步骤S107以第二识别转换模式来进行编码规则的识别。

可以理解的是,对于该待处理文本,若该待处理文本中每个独立的字符串段落(如中文字符串段落)的编码值唯一,则启用第一识别转换模式;若该待处理文本中每个独立的字符串段落的编码值不唯一,则启用第二识别转换模式。也就是说,通过确定该待处理文本中每个独立的字符串段落的编码值是否唯一,来选择启用第一识别转换模式或启用第二识别转换模式。

需要说明的是,在正常情况中,文本中每个独立的中文字符串段落的编码值都是唯一的。但在数据处理异常情况下,例如在文本写入的过程中切换了编码继续写入这一异常情况,会导致文本中每个独立的中文字符串段落的编码值不唯一。因此针对前述正常情况和异常情况下的编码规则的识别,在本发明实施例中设置两种识别转换模式,分别用于针对不同情况下进行编码规则的识别。

步骤S104:将指针加1。

步骤S105:判断指针是否移动至待处理文本的文件尾。当指针未移动至待处理文本的文件尾时,返回执行步骤S102;当指针移动至待处理文本的文件尾时,结束流程。

在具体实现步骤S104的过程中,在将指针加1之后,判断该指针是否移动至待处理文本的文件尾。如果指针未移动至待处理文本的文件尾,也就是指针当前所指向的字节不是该待处理文本的最后一个字节,返回继续执行步骤S102。如果指针移动至待处理文本的文件尾,则结束整个流程。

步骤S106:在启用第一识别转换模式的情况下,若指针当前所指向的字节不小于第一值,利用预设的映射哈希表和第二值,对待处理文本的待处理字符串段落进行编码规则的识别,确定待处理字符串段落的当前编码规则并将其转换为目标编码规则,将指针进行移动,执行步骤S105。

需要说明的是,待处理字符串段落的当前编码规则为第一编码规则或第二编码规则。映射哈希表包含:每个字符所对应的第一编码规则的编码值,每个字符所对应的第二编码规则的编码值,及每个字符所对应的优先级。

可以理解的是,预先构建映射哈希表,该映射哈希表中包含了(字符,第一编码规则的编码值,优先级)的映射关系,以及包含了(字符,第二编码规则的编码值,优先级)的映射关系。例如:映射哈希表中包含了(中文字符,GBK编码值,优先级)的映射关系,以及包含了(中文字符,UTF-8编码值,优先级)的映射关系。

也就是说,对于某个字符而言,可通过映射哈希表确定该字符的第一编码规则和第二编码规则的编码值,以及与该字符对应的优先级。

为更好解释说明如何构建映射哈希表,通过以下示例进行解释说明。

需要说明的是,文本中所包含的中文字符可划分为中文汉字和中文符号两类。其中,对于中文汉字部分,以《现代汉语常用字表》和《现代汉语通用字表》作为依据,《现代汉语常用字表》由2500个常用字及1000个次常用字组成,《现代汉语通用字表》由《现代汉语常用字表》中的3500个字与另外3500个字组成。

GBK编码规则(以1.0版本为例)共包含21003个汉字(包括部首),由于该GBK编码规则已经包含了业务系统环境中可能用到的所有汉字,因此所构建的映射哈希表以GBK编码规则的字符集为基础。

对于每个中文汉字,记录该中文汉字对应的GBK编码值、UTF-8编码值以及优先级,优先级的划分规则为:常用字的优先级为4(仅举例),次常用字的优先级为3(仅举例),其余通用字表中的字的优先级为2(仅举例),其余中文字符的优先级为1(仅举例)。

所构建的映射哈希表中,中文汉字对应的GBK编码值、UTF-8编码值以及优先级的示例部分如表1,需要说明的是,表1仅仅是映射哈希表中的部分内容。

表1:

对于中文符号部分,对GBK编码规则中包含的883个中文符号,依次记录每个中文符号对应的GBK编码值、UTF-8编码值以及优先级,所有中文符号的优先级全置为4(仅举例,数值可自定义)。所构建的映射哈希表中,中文符号对应的GBK编码值、UTF-8编码值以及优先级的示例部分如表2,需要说明的是,表2仅仅是映射哈希表中的部分内容。

表2:

需要说明的是,由于GBK为双字节字符(即一个GBK字符由两个字节组成),每个字节理论上可取0至255中的任意值,但是在GBK编码规则中,并不保证任意两个字节所组成的字符都有效,例如:如两个字节的取值为255(也就是十六进制的FF),此时无法在GBK编码规则中对应到具体的字符,此时该取值为255的两个字节是不可识别的编码,不可识别的编码的优先级默认为0。

以上是关于如何构建映射哈希表的示例内容。

由上述内容可知,待处理文本中每个独立的字符串段落(如中文字符串段落)的编码值唯一,则启用第一识别转换模式;在具体实现步骤S106的过程中,在启用第一识别转换模式时,当指针当前所指向的字节不小于第一值时,利用哈希映射表和第二值,对待处理文本的待处理字符串段落进行编码规则的识别,识别得到待处理字符串段落的当前编码规则,并将待处理字符串段落的当前编码规则转换为目标编码规则。

可以理解的是,步骤S106所示出的内容为:每次对待处理文本的一个待处理字符串段落进行编码规则的识别的内容。对于当前所处理的待处理字符串段落,在识别出该待处理字符串段落的当前编码规则并进行转换后,移动指针,将指针移动至该待处理字符串段落的终止字节处(也就是段落尾),执行步骤S105判断指针是否移动至文件尾。若指针还未移动到文件尾,继续对待处理文本的下一个待处理字符串段落进行编码规则的识别。

需要说的是,当前编码规则为第一编码规则或第二编码规则,目标编码规则为第一编码规则、第二编码规则或者其它编码规则。也就是说对于每个待处理字符串段落,如果该待处理字符串段落的当前编码规则与目标编码规则相同,则不需要转换;如果该待处理字符串段落的当前编码规则与目标编码规则不相同,则需将待处理字符串段落的当前编码规则转换为目标编码规则。

也就是说,将待处理字符串段落中的各个字符的编码规则从当前编码规则转换为目标编码规则,相当于转换字符的编码形式。

例如:假设确定待处理字符串段落的当前编码规则为GBK编码规则,目标编码为UTF-8编码规则,则需将该待处理字符串段落的各个字符的GBK编码值转换为UTF-8编码值;如该待处理字符串段落中的“一”的GBK编码值为D2BB,由于“一”的UTF-8编码值为E4B880,此时将待处理字符串段落中的“一”的编码值替换为E4B880,该待处理字符串段落中的其它字符同理。

由前述内容可知,启用第一识别转换模式的前提条件为待处理文本中每个独立的字符串段落的编码值唯一,在一些实施例中,预先设置一阈值(以N来表示),对于待处理文本的每个待处理字符串段落,通过该待处理字符串段落的最多N个字符来判断该待处理字符串段落的当前编码规则,也就是,不需要通过待处理字符串段落的所有字符才能判断该待处理字符串段落的当前编码规则,只需要N个字符即可。

例如:假设某个待处理字符串段落存在2000个字符,只需要利用300个字符就可以判断该待处理字符串段落的当前编码规则为GBK编码规则或者UTF-8编码规则。

综上,在启用第一识别转换模式的情况下,是以待处理文本的字符串段落为处理维度,完成各个字符串段落的编码规则的识别并进行转换。

步骤S107:在启用第二识别转换模式的情况下,若指针当前所指向的字节不小于第一值,利用映射哈希表和第二值,对待处理文本的字符进行编码规则的识别,确定待处理文本的字符的当前编码规则并将其转换为目标编码规则,将指针进行移动,执行步骤S105。

待处理文本的字符的当前编码规则为第一编码规则或第二编码规则。

由上述内容可知,待处理文本中每个独立的字符串段落(如中文字符串段落)的编码值不唯一,则启用第二识别转换模式;在具体实现步骤S107的过程中,在启用第二识别转换模式的情况下,当指针当前所指向的字节不小于第一值时,对待处理文本的字符进行编码规则的识别,确定待处理文本的字符的当前编码规则并将其转换为目标编码规则。

可以理解的是,步骤S107所示出的内容中,对于当前所处理的待处理文本中的某个字符,在识别出该字符的当前编码规则并进行转换后,移动指针,将指针移动至该字符后,执行步骤S105判断指针是否移动至文件尾。若指针还未移动到文件尾,继续对待处理文本的下一个字符进行编码规则的识别。

综上,在启用第二识别转换模式的情况下,是以待处理文本的字符为处理维度,完成各个字符的编码规则的识别并进行转换。

在本发明实施例中,对于使用多种编码规则进行编码的文本,根据实际情况选择相应的识别转换模式,从不同维度识别文本的各部分内容的当前编码规则并将其转换为统一的目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

上述本发明实施例图1步骤S106中涉及的识别待处理字符串段落的当前编码规则的过程,参见图2,示出了本发明实施例提供的识别并转换待处理字符串段落的当前编码规则的流程图,包括以步骤:

需要说明的是,图2中所示出的各个步骤,是以判断一个待处理字符串段落的编码规则为示例,用于解释如何判断一个待处理字符串段落的编码规则。

步骤S201:在启用第一识别转换模式的情况下,若指针当前所指向的字节不小于第一值,确定指针当前所指向的字节为待处理文本的待处理字符串段落的起始字节。

在具体实现步骤S201的过程中,在启用第一识别转换模式的情况下,若指针当前所指向的字节不小于第一值,确定指针当前所指向的字节为待处理文本的待处理字符串段落的起始字节。也就是说,当指针当前所指向的字节大于或等于第一值(如十六进制的0x81),表示指针已进入该待处理字符串段落,指针当前所指向的字节为该待处理字符串段落的起始字节,此时指针的指针值也就是起始指针位。

步骤S202:判断起始字节的高四位是否为第二值。若起始字节的高四位不为第二值,执行步骤S203;若起始字节的高四位为第二值,执行步骤S204及后续步骤。

在具体实现步骤S202的过程中,判断待处理段落的起始字节的高四位是否为第二值(如二进制的1110)。如果起始字节的高四位不为第二值,则表示该起始字节所对应的字符不可能为UTF-8字符,只可能是GBK字符。由前述内容可知,启用第一识别转换模式的前提是待处理文本的每个独立的字符串段落的编码值唯一,因此,如果起始字节的高四位不为第二值,则该待处理字符串段落的当前编码规则为第一编码规则(GBK编码规则),执行步骤S203。

如果起始字节的高四位为第二值,那么该待处理字符串段落的当前编码规则可能是第一编码规则也可能是第二编码规则,此时需通过步骤S204及后续步骤来进行进一步的判断。

步骤S203:确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。执行步骤S215。

在具体实现步骤S203的过程中,若起始字节的高四位不为第二值,确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处,执行步骤S215将该待处理字符串段落的当前编码规则转换为目标编码规则。

也就是说,确定待处理字符串段落的当前编码规则为第一编码规则后,将指针循环加2直至遇到非中文字符边界(也就是遇到小于第一值的字节)。

步骤S204:以第二编码规则识别指针当前所指向的字节对应的字符,累加所识别的字符的第一个数,并基于映射哈希表确定所识别的字符的第一优先级,将指针加3。

在具体实现步骤S204的过程中,若起始字节的高四位为第二值,以第二编码规则(如UTF-8编码规则)识别指针当前所指向的字节对应的字符,累加所识别的字符的第一个数,并基于映射哈希表确定所识别的字符的第一优先级,将指针加3。

在一些实施例中,以UTF-8编码规则识别指针当前所指向的字节对应的字符具体是指:利用UTF-8编码表,判断指针当前所指向的字节以及接下来的几个字节对应哪个字符。

在将指针加3之后,若指针当前所指向的字节小于第一值,执行步骤S205;若指针当前所指向的字节不小于第一值、高四位为第二值及第一个数超过阈值,执行步骤S206;若指针当前所指向的字节不小于第一值且高四位不为第二值,执行步骤S207。若指针所指向的字节不小于第一值、高四位为第二值及第一个数未超过阈值,执行步骤S208。

步骤S205:若指针当前所指向的字节小于第一值,根据第一个数和所有第一优先级,计算第一平均优先级。执行步骤S209。

在具体实现步骤S205的过程中,若指针当前所指向的字节小于第一值,根据所累加得到的第一个数以及所有所识别得到的字符的第一优先级,计算第一平均优先级,并执行步骤S209。

例如:假设以UTF-8编码规则(第二编码规则)识别出100个UTF-8字符,此时第一个数为100,假设100个UTF-8字符的第一优先级的总和为150,则第一平均优先级=150/100=1.5。

也就是说,若指针当前所指向的字节小于第一值,表示遇到了非中文字符边界,此时结束以第二编码规则识别字符的过程,计算第二编码规则对应的第一平均优先级。

步骤S206:若指针当前所指向的字节不小于第一值、高四位为第二值及第一个数超过阈值,根据第一个数和所有第一优先级,计算第一平均优先级。执行步骤S209。

在具体实现步骤S206的过程中,若指针当前所指向的字节不小于第一值,且若指针当前所指向的字节的高四位为第二值,且若第一个数超过阈值,利用第一个数和所有第一优先级,计算第一平均优先级,并执行步骤S209。计算第一平均优先级的过程参见步骤S205。

步骤S207:若指针当前所指向的字节不小于第一值且高四位不为第二值,执行步骤S203。

在具体实现步骤S207的过程中,若指针当前所指向的字节不小于第一值且高四位不为第二值,也就是若指针当前所指向的字节不小于0x81且高四位不是1110,此时表示指针当前所指向的字节对应的字符不可能为UTF-8字符,只可能为GBK字符,由于启用第一识别转换模式的前提是待处理文本的每个独立的字符串段落的编码值唯一,因此,在此种情况下,返回执行步骤S203,即确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。

步骤S208:若指针所指向的字节不小于第一值、高四位为第二值及第一个数未超过阈值,返回执行步骤S204。

在具体实现步骤S208的过程中,若指针所指向的字节不小于第一值,且若若指针所指向的字节的高四位为第二值,且若第一个数未超过阈值,返回执行步骤S204继续以第二编码规则识别指针当前所指向的字节对应的字符,并进行字符的累加以及第一优先级的确定。

步骤S209:在计算得到第一平均优先级后,将指针移动至起始字节处,执行步骤S210。

在具体实现步骤S209的过程中,由前述内容可知,第一平均优先级为第二编码规则对应的平均优先级。由于待处理字符串段落的当前编码规则可能是第一编码规则也可能是第二编码规则,在计算得到第二编码规则对应的第一平均优先级后,需计算第一编码规则对应的第二平均优先级。

第二平均优先级的计算过程为:先将指针移动至待处理字符串段落的起始字节处,也就是将指针恢复至起始指针位,再利用以下步骤S210的内容计算第二平均优先级。

步骤S210:以第一编码规则识别指针当前所指向的字节对应的字符,累加所识别的字符的第二个数,并基于映射哈希表确定所识别的字符的第二优先级,将指针加2。

在具体实现步骤S210的过程中,以第一编码规则识别指针当前所指向的字节对应的字符,累加所识别的字符的第二个数,并基于映射哈希表确定所识别的字符的第二优先级,将指针加2。

将指针加2后,若指针当前所指向的字节不小于第一值且第二个数未超过阈值,执行步骤S211;若指针当前所指向的字节小于第一值或第二个数超过阈值,执行步骤S212。

步骤S211:若指针当前所指向的字节不小于第一值且第二个数未超过阈值,返回执行步骤S210。

在具体实现步骤S211的过程中,若指针当前所指向的字节不小于第一值且第二个数未超过阈值,返回执行步骤S210,继续以第一编码规则识别指针当前所指向的字节对应的字符,并累积第二个数以及确定字符的第二优先级。

步骤S212:若指针当前所指向的字节小于第一值或第二个数超过阈值,根据所有第二优先级和第二个数,计算第二平均优先级。

在具体实现步骤S212的过程中,若指针当前所指向的字节小于第一值或第二个数超过阈值,也就是指针遇到非中文字符边界或所识别的字符的个数超过阈值,根据所有第二优先级和第二个数,计算第二平均优先级。

例如:假设以GBK编码规则(第一编码规则)识别出150个GBK字符,此时第二个数为150,假设150个GBK字符的第二优先级的总和为180,则第二平均优先级=180/150=1.2。

步骤S213:判断第二平均优先级是否大于第一平均优先级。当第二平均优先级大于第一平均优先级时,执行步骤S203。当第一平均优先级大于第二平均优先级,执行步骤S214。

在具体实现步骤S213的过程中,在计算得到第一平均优先级和第二平均优先级之后,判断第二平均优先级是否大于第一平均优先级。

当第二平均优先级大于第一平均优先级时,执行步骤S203;也就是说,当第二平均优先级大于第一平均优先级,确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。执行步骤S215。

当第一平均优先级大于第二平均优先级,执行步骤S214。

也就是说,在计算得到第一平均优先级和第二平均优先级之后,确定最大的优先级对应的编码规则为待处理字符串段落的当前编码规则。

步骤S214:确定待处理字符串段落的当前编码规则为第二编码规则,将指针循环加3,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。执行步骤S215。

在具体实现步骤S214的过程中,第一平均优先级大于第二平均优先级,确定待处理字符串段落的当前编码规则为第二编码规则,将指针循环加3,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。执行步骤S215。

步骤S215:将当前编码规则转换为目标编码规则。

在具体实现步骤S215的过程中,在通过第一值、映射哈希表、第二值和阈值确定待处理字符串段落的当前编码规则之后,将该待处理字符串段落的当前编码规则转换为目标编码规则,也就是将待处理字符串段落的各个字符的当前编码规则转换为目标编码规则。

例如:假设待处理字符串段落存在10000个字节,阈值为300,此时通过300个字节确定该待处理字符串段落的当前编码规则为GBK编码规则,假设目标编码规则为UTF-8编码规则。此时将该待处理字符串段落包含的所有GBK字符转换为UTF-8字符。

在本发明实施例中,待处理文本的每个独立的字符串段落的编码值唯一时,启用第一识别转换模式,对待处理文本的每个待处理字符串段落进行编码规则的识别,并将每个待处理字符串段落的当前编码规则转换为目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

为更好解释说明上述本发明实施例图1和图2中的内容,通过图3示出的识别并转换待处理字符串段落的当前编码规则的另一流程图进行举例说明,需要说明的是,图3中,第一编码规则为GBK编码规则,第二编码规则为UTF-8编码规则,第一值为十六进制的0x81,第二值为二进制的1110。

参见图3,示出了本发明实施例提供的识别并转换待处理字符串段落的当前编码规则的另一流程图,包括以下步骤:

步骤S301:分别构造中文GBK编码到优先级的哈希表,以及中文UFT-8编码到优先级的哈希表。

在具体实现步骤S301的过程中,构造哈希表(也就是上本发明实施例图1步骤S106中提及的映射哈希表),映射哈希表中包含了(中文字符,GBK编码值,优先级)的映射关系,以及包含了(中文字符,UTF-8编码值,优先级)的映射关系。

步骤S302:将指针置于待处理文本的文件头。

步骤S303:读取当前字节。

需要说明的是,当前字节也就是指针当前所指向的字节。

步骤S304:判断该字节是否大于或等于0x81。若该字节小于0x81,指针加1并执行步骤S320;若该字节大于或等于0x81,执行步骤S305。

步骤S305:确定该字节为中文字符串的起始位置,记录当前指针值为起始指针位。

在具体实现步骤S305的过程中,若该字节大于或等于0x81,确定指针当前所指向的字节为待处理字符串段落的起始字节(也就是中文字符串的起始位置),记录当前指针值为起始指针位。

步骤S306:判断该字节的高四位是否为1110。若该字节的高四位为1110,执行步骤S307;若该字节的高四位不为1110,执行步骤S316。

步骤S307:以UTF-8编码规则识别当前字符,累加字符个数以及字符优先级,并将指针加3。

需要说的是,步骤S307中所累加的字符个数即为上述提及的第一个数,字符优先级即为上述提及的第一优先级。

步骤S308:判断指针当前所指向的字节是否大于或等于0x81。若指针当前所指向的字节小于0x81,执行步骤S311;若指针当前所指向的字节大于或等于0x81,执行步骤S309。

步骤S309:判断指针当前所指向的字节的高四位是否为1110。若该字节的高四位为1110,执行步骤S310;若该字节的高四位不为1110,执行步骤S316。

步骤S310:确定所记录的字符数是否超过阈值。若超过阈值,执行步骤S311;若不超过阈值,返回执行步骤S307。

需要说明的是,在步骤S310中,所记录的字符数即为步骤S307中所累加的字符个数,也就是第一个数。

步骤S311:计算UTF-8编码规则对应的平均字符优先级。

需要说明的是,步骤S311中的UTF-8编码规则对应的平均字符优先级,即为上述提及的第一平均优先级。

步骤S312:将指针恢复至起始指针位,以GBK编码规则识别当前字符,累加字符个数以及字符优先级,并将指针加2,执行步骤S313。

需要说明的是,在步骤S312中,以GBK编码规则识别当前字符并累加的字符个数即为上述提及的第二个数,字符优先级即为上述提及的第二优先级。

步骤S313:判断指针当前所指向的字节是否小于0x81或者当前记录字符个数是否超过阈值。若指针当前所指向的字节不小于0x81且当前记录字符个数未超过阈值,返回执行步骤S312;若指针当前所指向的字节不小于0x81或当前记录字符个数超过阈值,执行步骤S314。

需要说明的是,在步骤S313中,当前记录字符个数即为步骤S312中累加的字符个数,也就是第二个数,

步骤S314:计算GBK编码规则对应的平均字符优先级。

需要说明的是,步骤S314中GBK编码规则对应的平均字符优先级即为上述提及的第二平均优先级。

步骤S315:判断GBK编码规则对应的平均字符优先级是否较大。若GBK编码规则对应的平均字符优先级较大,执行步骤S316;若GBK编码规则对应的平均字符优先级较小,执行步骤S317。

需要说明的是,步骤S315中,判断GBK编码规则对应的平均字符优先级是否较大即为:上述提及的判断第二平均优先级是否大于第一平均优先级。

步骤S316:确定从起始指针位开头的中文字符串为GBK编码,指针循环加2,直至当前指针所对应的字节小于0x81为止,标识当前GBK编码中文字符串。

需要说明的是,步骤S316中,从起始指针位开头的中文字符串为GBK编码即表示:待处理字符串段落的当前编码规则为GBK编码规则。

步骤S317:确定从起始指针位开头的中文字符串为UTF-8编码,指针循环加3,直至当前指针所对应的字节小于0x81为止,标识当前UTF-8编码中文字符串。

需要说明的是,步骤S317中,从起始指针位开头的中文字符串为UTF-8编码即表示:待处理字符串段落的当前编码规则为UTF-8编码规则。

步骤S318:判断中文字符串编码与目标编码是否不同。若中文字符串编码与目标编码不同,执行步骤S319;若中文字符串编码与目标编码相同,执行步骤S320。

需要说明的是,在步骤S318中,中文字符串编码即指示待处理字符串段落的当前编码规则,目标编码指示目标编码规则。

步骤S319:对当前字符串进行转码。

在具体实现步骤S319的过程中,对当前字符串(也就是待处理字符串段落)转码,将该当前字符串对应的中文字符串编码转换为目标编码。

步骤S320:判断指针是否到达文件尾。若指针到达文件尾,则结束;若指针未到达文件尾,返回执行步骤S303。

需要说明的是,步骤S301至步骤S320的执行原理,可参见上述本发明实施例图1和图2中的内容,在此不再赘述。

上述本发明实施例图1步骤S107中涉及的识别并转换待处理文本的字符的当前编码规则的过程,参见图4,示出了本发明实施例提供的识别并转换待处理文本的字符的当前编码规则的流程图,包括以下步骤:

步骤S401:在启用第二识别转换模式的情况下,若指针当前所指向的字节不小于第一值,判断指针当前所指向的字节的高四位是否为第二值。当指针当前所指向的字节的高四位不为第二值,执行步骤S402至步骤S404;当指针当前所指向的字节的高四位为第二值,执行步骤S405至步骤S408。

在具体实现步骤S401的过程中,在启用第二识别转换模式的情况下,当指针当前所指向的字节不小于第一值时,判断指针当前所指向的字节的高四位是否为第二值。若指针当前所指向的字节的高四位不为第二值(也就是二进制的1110),则表示该字节只可能是某个GBK字符的首字节,执行步骤S402至步骤S404;若指针当前所指向的字节的高四位为第二值,则表示该字节可能和其后面2个字节组成一个UTF-8字符(即采用第二编码规则的字符),也可能其后面1个字节组成一个GBK字符(即采用第一编码规则的字符),此时需执行步骤S405至步骤S408以进一步判断实际采用哪种编码规则。

步骤S402:以第一编码规则确定以指针当前所指向的字节为开头字节的第一字符,并基于映射哈希表确定第一字符的第三优先级。

在具体实现步骤S402的过程中,若指针当前所指向的字节不小于第一值且高四位不为第二值,以第一编码规则确定以指针当前所指向的字节为开头字节的第一字符,并基于映射哈希表确定第一字符的第三优先级。

在一些实施例中,具体在GBK编码表查找以指针当前所指向的字节为开头字节的第一字符,也就是说,该第一字符由指针当前所指向的字节及其后面的1个字节组成。需要说明的是,则基于映射哈希表确定该第一字符的第三优先级,此时,若第一字符无法被识别则第三优先级为默认值(比如0)。

也就是说,可通过第一字符的第三优先级是否为0来判断该第一字符是否可以被识别。

步骤S403:当第三优先级不为0时,确定第一字符的当前编码规则为第一编码规则,并将第一字符的当前编码规则转换为目标编码规则,将指针加2。

在具体实现步骤S403的过程中,当第一字符的第三优先级不为0时,表示该第一字符为能够被识别的GBK字符,也就是确定第一字符的当前编码规则为第一编码规则,将第一字符的当前编码规则转换为目标编码规则,指针加2,继续对第一字符后面的字节进行处理(相当于返回执行上述本发明实施例图1步骤S102)。

步骤S404:当第三优先级为0时,对第一字符不执行任何操作,将指针加1。

在具体实现步骤S404的过程中,若第一字符的第三优先级为0,则表示第一字符不可识别,此时对第一字符不做任何处理,将指针加1,将指针移动至下一字节,以继续对后面的字节进行处理。

步骤S405:以第一编码规则确定由指针当前所指向的字节及其后面一个字节组成的第二字符,并基于映射哈希表确定第二字符的第四优先级;以第二编码规则确定由指针当前所指向的字节及其后面两个字节组成的第三字符,并基于映射哈希表确定第三字符的第五优先级。

在具体实现步骤S405的过程中,若指针当前所指向的字节不小于第一值且高四位为第二值,以第一编码规则确定由指针当前所指向的字节及其后面一个字节组成的第二字符(也就是由两个字节构成的GBK字符),并基于映射哈希表确定第二字符的第四优先级(GBK优先级);以第二编码规则确定由指针当前所指向的字节及其后面两个字节组成的第三字符(也就是以3个字节构成的UTF-8字符),并基于映射哈希表确定第三字符的第五优先级(UTF-8优先级)。

在确定得到第二字符的第四优先级和第三字符的第五优先级之后,需比较第四优先级和第五优先级的大小,比较结果及后续执行过程详见以下步骤。

步骤S406:若第四优先级大于第五优先级,确定第二字符的当前编码规则为第一编码规则,并将第二字符的当前编码规则转换为目标编码规则,将指针加2。

在具体实现步骤S406的过程中,若第四优先级大于第五优先级,则表示指针当前所指向的字节与其后面1个字节组成GBK字符,也就是确定第二字符的当前编码规则为第一编码规则,并将第二字符的当前编码规则转换为目标编码规则,将指针加2,继续对第二字符后面的字节进行处理(相当于返回执行上述本发明实施例图1步骤S102)。

步骤S407:若第五优先级大于第四优先级,确定第三字符的当前编码规则为第二编码规则,并将第三字符的当前编码规则转换为目标编码规则,将指针加3。

在具体实现步骤S407的过程中,若第五优先级大于第四优先级,表示指针当前所指向的字节与其后面2个字节组成UTF-8字符,也就是确定第三字符的当前编码规则为第二编码规则,并将第三字符的当前编码规则转换为目标编码规则,将指针加3,继续对第三字符后面的字节进行处理(相当于返回执行上述本发明实施例图1步骤S102)。

步骤S408:若第四优先级等于第五优先级,对第二字符和第三字符不执行任何操作,将指针加1。

在具体实现步骤S408的过程中,若第四优先级等于第五优先级,此种情况为第四优先级和第五优先级同为1或0的情况,该情况表示两种编码规则对应的字符均无法查到,或者,第四字符和第五字符均为罕见字,在此种情况下,认为指针当前所指向的字节无法被识别,对第二字符和第三字符不执行任何操作,将指针加1,将指针移动至下一字节并继续进行处理。

在本发明实施例中,待处理文本的每个独立的字符串段落的编码值不唯一时,启用第二识别转换模式,对待处理文本的每个字符进行编码规则的识别,并将待处理文本的每个字符的当前编码规则转换为目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

为更好解释说明上述本发明实施例图1和图4中的内容,通过图5示出的识别并转换待处理文本的字符的当前编码规则的另一流程图进行举例说明,需要说明的是,图5中,第一编码规则为GBK编码规则,第二编码规则为UTF-8编码规则,第一值为十六进制的0x81,第二值为二进制的1110。

参见图5,示出了本发明实施例提供的识别并转换待处理文本的字符的当前编码规则的另一流程图,包括以下步骤:

步骤S501:分别构造中文GBK编码到优先级的哈希表,以及中文UFT-8编码到优先级的哈希表。

在具体实现步骤S501的过程中,构造哈希表(也就是上本发明实施例图1步骤S106中提及的映射哈希表),映射哈希表中包含了(中文字符,GBK编码值,优先级)的映射关系,以及包含了(中文字符,UTF-8编码值,优先级)的映射关系。

步骤S502:将指针置于待处理文本的文件头。

步骤S503:读取当前字节。

需要说明的是,当前字节也就是指针当前所指向的字节。

步骤S504:判断该字节是否大于或等于0x81。若该字节小于0x81,指针加1并执行步骤S516;若该字节大于或等于0x81,执行步骤S505。

需要说明的是,该字节为指针当前所指向的字节。

步骤S505:判断该字节的高四位是否为1110。若该字节的高四位为1110,执行步骤S506至步骤S509;若该字节的高四位不为1110,执行步骤S510至步骤S515。

步骤S506:在GBK编码表中,读取该字节开头的双字节对应的优先级。

需要说明的是,该字节开头的双字节即为上述提及的第一字符,该字节开头的双字节对应的优先级即为上述提及的第三优先级。

步骤S507:判断第三优先级是否为0。若第三优先级为0,执行步骤S509;若第三优先级不为0,执行步骤508。

步骤S508:确定该字符为GBK字符,识别并转换,指针加2并执行步骤S516。

在具体实现步骤S508的过程中,若第三优先级不为0,确定该字符(也就是第一字符)为GBK字符,也就是确定第一字符的当前编码规则为第一编码规则,并将第一字符的当前编码规则转换为目标编码规则,指针加2并执行步骤S516。

步骤S509:该字节开头的字符不可识别,不进行任何操作,指针加1并执行步骤S516。

在具体实现步骤S509的过程中,若第三优先级为0,确定该字符(也就是第一字符)不可识别,对第一字符不进行任何操作,将指针加1并执行步骤S516。

步骤S510:读取该字节与后一个字节并查询GBK字符哈希表,得到GBK优先级。

在具体实现步骤S510的过程,读取该字节与后一个字节,即可得到上述提及的第二字符,查询GBK字符哈希表(也就是上述映射哈希表中的内容)确定第二字符对应的GBK优先级(也就是第四优先级)。

步骤S511:读取该字节与后两个字节并查询UTF-8字符哈希表,得到UTF-8优先级。

在具体实现步骤S511的过程,读取该字节与后两个字节,即可得到上述提及的第三字符,查询UTF-8字符哈希表(也就是上述映射哈希表中的内容)确定第三字符对应的UTF-8优先级(也就是第五优先级)。

步骤S512:比较二者优先级大小。

在具体实现步骤S512的过程中,比较GBK优先级(也就是第四优先级)和UTF-8优先级(也就是第五优先级)之间的大小。若GBK优先级较大,执行步骤S513;若UTF-8优先级较大,执行步骤S514;若二者优先级相同,执行步骤S515。

步骤S513:识别该字符为GBK字符,识别并转换,指针加2并执行步骤S516。

在具体实现步骤S513的过程中,确定该字符(也就是第二字符)为GBK字符,也就是确定第二字符的当前编码规则为第一编码规则,并将第二字符的当前编码规则转换为目标编码规则,指针加2并执行步骤S516。

步骤S514:识别该字符为UTF-8字符,识别并转换,指针加3并执行步骤S516。

在具体实现步骤S514的过程中,确定该字符(也就是第三字符)为UTF-8字符,也就是确定第三字符的当前编码规则为第二编码规则,并将第三字符的当前编码规则转换为目标编码规则,指针加3并执行步骤S516。

步骤S515:该字节开头的字符不可识别,不做任何操作,指针加1并执行步骤S516。

步骤S516:判断指针是否移动至文件尾。若指针到达文件尾,则结束;若指针未到达文件尾,执行步骤S504。

需要说明的是,步骤S501至步骤S516的执行原理,可参见上述本发明实施例图1和图4中的内容,在此不再赘述。

与上述本发明实施例提供的一种对混杂多编码字符文本进行统一编码转换的方法相对应,参见图6,本发明实施例还提供了一种对混杂多编码字符文本进行统一编码转换的装置的结构框图,该装置包括:设置单元601、获取单元602、第一处理单元603、第二处理单元604和第三处理单元605;

设置单元601,用于将指针置于待处理文本对应的文件头。

获取单元602,用于获取指针当前所指向的字节。

第一处理单元603,用于若指针当前所指向的字节小于第一值,将指针加1,当指针未移动至待处理文本的文件尾时,返回执行获取单元602。

第二处理单元604,用于在启用第一识别转换模式的情况下,若指针当前所指向的字节不小于所述第一值,利用预设的映射哈希表和第二值,对待处理文本的待处理字符串段落进行编码规则的识别,确定待处理字符串段落的当前编码规则并将其转换为目标编码规则,将指针进行移动,返回执行获取单元602直至指针移动至文件尾,待处理字符串段落的当前编码规则为第一编码规则或第二编码规则。

第三处理单元605,用于在启用第二识别转换模式的情况下,若指针当前所指向的字节不小于第一值,利用映射哈希表和第二值,对待处理文本的字符进行编码规则的识别,确定待处理文本的字符的当前编码规则并将其转换为目标编码规则,将指针进行移动,返回执行获取单元602直至指针移动至文件尾,待处理文本的字符的当前编码规则为第一编码规则或第二编码规则。

在一些具体实施例中,第一编码规则为GBK编码规则,所述第二编码规则为UTF-8编码规则。第一值为十六进制的0x81,第二值为二进制的1110。

其中,映射哈希表包含:每个字符所对应的第一编码规则的编码值,每个字符所对应的第二编码规则的编码值,及每个字符所对应的优先级。

在本发明实施例中,对于使用多种编码规则进行编码的文本,根据实际情况选择相应的识别转换模式,从不同维度识别文本的各部分内容的当前编码规则并将其转换为统一的目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

优选的,结合图6示出的内容,第二处理单元604包括:确定模块和处理模块,各个模块的执行原理如下:

确定模块,用于在启用第一识别转换模式的情况下,若指针当前所指向的字节不小于第一值,确定指针当前所指向的字节为待处理文本的待处理字符串段落的起始字节。

处理模块,用于若起始字节的高四位不为第二值,确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处;若起始字节的高四位为第二值,执行以下步骤确定处理字符串段落的当前编码规则;将当前编码规则转换为目标编码规则;

以下步骤包括:

以第二编码规则识别指针当前所指向的字节对应的字符,累加所识别的字符的第一个数,并基于映射哈希表确定所识别的字符的第一优先级,将指针加3;

若指针当前所指向的字节小于第一值,根据第一个数和所有第一优先级,计算第一平均优先级;

若指针当前所指向的字节不小于第一值、高四位为第二值及第一个数超过阈值,根据第一个数和所有第一优先级,计算第一平均优先级;

若指针当前所指向的字节不小于第一值且高四位不为第二值,确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处;

若指针所指向的字节不小于第一值、高四位为第二值及第一个数未超过阈值,返回执行以第二编码规则识别指针当前所指向的字节对应的字符这一步骤;

在计算得到第一平均优先级后,将指针移动至起始字节处;

以第一编码规则识别指针当前所指向的字节对应的字符,累加所识别的字符的第二个数,并基于映射哈希表确定所识别的字符的第二优先级,将指针加2;

若指针当前所指向的字节不小于第一值且所述第二个数未超过阈值,返回执行以第一编码规则识别指针当前所指向的字节对应的字符这一步骤;

若指针当前所指向的字节小于第一值或所述第二个数超过阈值,根据所有第二优先级和第二个数,计算第二平均优先级;

当第二平均优先级大于第一平均优先级时,确定待处理字符串段落的当前编码规则为第一编码规则,将指针循环加2,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处;

当第一平均优先级大于第二平均优先级时,确定待处理字符串段落的当前编码规则为第二编码规则,将指针循环加3,直至指针所指向的字节小于第一值,确定已将指针移动至待处理字符串段落的终止字节处。

在本发明实施例中,待处理文本的每个独立的字符串段落的编码值唯一时,启用第一识别转换模式,对待处理文本的每个待处理字符串段落进行编码规则的识别,并将每个待处理字符串段落的当前编码规则转换为目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

优选的,结合图6示出的内容,第三处理单元605包括:第一处理模块和第二处理模块,各个模块的执行原理如下:

第一处理模块,用于在启用第二识别转换模式的情况下,若指针当前所指向的字节不小于第一值且高四位不为第二值,以第一编码规则确定以指针当前所指向的字节为开头字节的第一字符,并基于映射哈希表确定第一字符的第三优先级;当第三优先级不为0时,确定第一字符的当前编码规则为第一编码规则,并将第一字符的当前编码规则转换为目标编码规则,将指针加2;当第三优先级为0时,对第一字符不执行任何操作,将所述指针加1。

第二处理模块,用于:在启用第二识别转换模式的情况下,若指针当前所指向的字节不小于第一值且高四位为第二值,以第一编码规则确定由指针当前所指向的字节及其后面一个字节组成的第二字符,并基于映射哈希表确定第二字符的第四优先级;以第二编码规则确定由指针当前所指向的字节及其后面两个字节组成的第三字符,并基于映射哈希表确定第三字符的第五优先级;

若第四优先级大于第五优先级,确定第二字符的当前编码规则为第一编码规则,并将第二字符的当前编码规则转换为目标编码规则,将所述指针加2;

若第五优先级大于第四优先级,确定第三字符的当前编码规则为第二编码规则,并将第三字符的当前编码规则转换为目标编码规则,将指针加3;

若第四优先级等于第五优先级,对第二字符和第三字符不执行任何操作,将指针加1。

在本发明实施例中,待处理文本的每个独立的字符串段落的编码值不唯一时,启用第二识别转换模式,对待处理文本的每个字符进行编码规则的识别,并将待处理文本的每个字符的当前编码规则转换为目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

综上所述,本发明实施例提供一种对混杂多编码字符文本进行统一编码转换的方法及装置,对于使用多种编码规则进行编码的文本,根据实际情况选择相应的识别转换模式,从不同维度识别文本的各部分内容的当前编码规则并将其转换为统一的目标编码规则,以实现对混杂多编码字符文本进行统一编码转换。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号