一种选择读取目标文档的编码格式的方法及其系统的制作方法

文档序号:6514105阅读:191来源:国知局
一种选择读取目标文档的编码格式的方法及其系统的制作方法
【专利摘要】本发明提供一种选择读取目标文档的编码格式的方法及其系统,首先通过参考编码格式读取参考文档获得乱码模式,然后在对目标文档读取时,对于每种编码格式,将该编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定利用该编码格式读取所述目标文档时产生的乱码;再统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取所述目标文档的编码格式。上述技术方案有效避免了现有技术中只是读出所述目标文档的前几个字节,判定这些字节的值,从而得知其编码的格式,但是,有时候,目标文档的前几个字节并没有保留该文档的编码格式信息,无法获得该文档的编码格式的问题。
【专利说明】一种选择读取目标文档的编码格式的方法及其系统

【技术领域】
[0001] 本发明涉及一种选择读取目标文档的编码格式的方法及其系统,属于电数字数据 处理【技术领域】。

【背景技术】
[0002] 编码格式是指用预先规定的方法将文字、数字或其他对象编成数码。编码格式在 电子计算机、电视等相关领域广泛使用。文件编码格式也称为字符编码格式,用于指定在处 理文本时如何表示字符。读取中文文件时,未正确匹配文件编码格式的情况可能会导致发 生异常或产生不正确的结果。常见的汉字编码格式包括GB2312、BIG5、GBK、UTF-8等,对于 简体汉字的编码格式,目前又以GB2312和UTF-8最为常用。
[0003] 在windows系统中,文本文档被广泛使用,开发人员在编写程序读取文档时经常 遇到中文编码格式问题。例如,当读取一个文档进行后续处理时,发现程序产出的结果与预 期不一致,通过调试跟踪,发现根本原因是读取文件时,由于程序中用于读取文件的编码格 式与文件本身的编码格式不一致,导致程序读取得到的是乱码,从而带来了后续的错误。这 种情况普遍存在于开发过程中。此外,当需要读取的文档数量很多,并且这些文件的编码格 式可能不一致时,就更需要能够有一种选择读取目标文档的编码格式的方法来提高开发效 率。
[0004] 现有技术中公开的文本文档的编码格式读取方法,是读出文本文档的前几个字 节,判定这些字节的值,从而得知其编码的格式。但是,有时候,文本文档的前几个字节并没 有保留该文本文档的编码格式信息,通过这种方法就无法得到该文本文档的编码格式。如 果能够有一种机制,通过选择正确的编码格式来读取文档,将可以大大降低由于文件编码 格式引起的问题,提高开发效率。


【发明内容】

[0005] 本发明所要解决的技术问题是现有技术只是读出所述目标文档的前几个字节,判 定这些字节的值,从而得知其编码的格式,但是,有时候,目标文档的前几个字节并没有保 留该文档的编码格式信息,无法获得该文档的编码格式的问题。
[0006] 为解决上述技术问题,本发明是通过以下技术方案实现的:
[0007] -种选择读取目标文档的编码格式的方法,包括:
[0008] 通过至少一个参考编码格式读取参考文档,确定利用所述参考编码格式读取参考 文档时得到的全部或部分乱码模式;
[0009] 每次利用一种编码格式读取目标文档;
[0010] 对于每种编码格式,将该编码格式读取所述目标文档时产生的数据与确定的乱码 模式进行比较,确定利用该编码格式读取所述目标文档时产生的乱码;
[0011] 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定 读取所述目标文档的编码格式。
[0012] 所述参考编码格式属于包含了全部或部分编码格式的编码格式集,且所述参考编 码格式是该编码格式集中读取所述参考文档时会产生乱码的编码格式。
[0013] 通过所有的参考编码格式读取参考文档,确定利用所述参考编码格式读取参考文 档时得到的全部或部分乱码模式。
[0014] 所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的 过程如下:
[0015] 对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中的 非有效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱码 模式。
[0016] 所述非有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除所述 非有效判断字符以外的所有字符。
[0017] 统计有效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次数的阈 值,对于出现次数大于所述阈值的所有乱码字符,保存为乱码模式。
[0018] 统计有效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符出现次 数倒序排列乱码字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为乱码模 式。
[0019] 取得排列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为正 数,50彡k彡100。
[0020] 所述每次利用一种编码格式读取目标文档时读取部分内容,直到获得预先设置的 有效判断字符数为止;若读取所述文档的所有内容后仍未获得预先设置的有效判断字符 数,则按实际获取的有效判断字符数为准。
[0021] 有效判断字符数为50-1000。
[0022] 将该编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定 利用该编码格式读取所述目标文档时产生的乱码的过程为:
[0023] 将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱码模式中的 乱码字符逐个比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认为该数 据为乱码。
[0024] 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定 读取所述目标文档的编码格式的过程为:
[0025] 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例最低 的编码格式作为读取所述目标文档的编码格式。
[0026] 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定 读取所述目标文档的编码格式的过程为:
[0027] 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例低于 预设阈值的编码格式作为读取所述目标文档的编码格式。
[0028] 所述乱码比例为所述乱码字符占有效判断字符的比例。
[0029] 在每次利用一种编码格式读取目标文档时,所述编码格式属于所述编码格式集。
[0030] 一种选择读取目标文档的编码格式的系统,包括:
[0031] 乱码模式生成模块,用于通过至少一个参考编码格式读取参考文档,确定利用所 述参考编码格式读取参考文档时得到的全部或部分乱码模式;
[0032] 目标文档读取模块,用于每次利用一种编码格式读取目标文档;
[0033] 读取乱码模块,用于对于每种编码格式,将该编码格式读取所述目标文档时产生 的数据与确定的乱码模式进行比较,确定利用该编码格式读取所述目标文档时产生的乱 码;
[0034] 读取编码格式选择模块,用于统计利用每种编码格式读取所述目标文档时产生的 乱码,并进行比较,然后确定读取所述目标文档的编码格式。
[0035] 所述参考编码格式属于包含了全部或部分编码格式的编码格式集,且所述参考编 码格式是该编码格式集中读取所述参考文档时会产生乱码的编码格式。
[0036] 通过所有的参考编码格式读取参考文档,确定利用所述参考编码格式读取参考文 档时得到的全部或部分乱码模式。
[0037] 所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的 过程如下:
[0038] 对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中的 非有效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱码 模式。
[0039] 所述非有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除所述 非有效判断字符以外的所有字符。
[0040] 统计有效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次数的阈 值,对于出现次数大于所述阈值的所有乱码字符,保存为乱码模式。
[0041] 统计有效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符出现次 数倒序排列乱码字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为乱码模 式。
[0042] 取得排列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为正 数,50彡k彡100。
[0043] 所述每次利用一种编码格式读取目标文档时读取部分内容,直到获得预先设置的 有效判断字符数为止;若读取所述文档的所有内容后仍未获得预先设置的有效判断字符 数,则按实际获取的有效判断字符数为准。
[0044] 有效判断字符数为50-1000。
[0045] 将该编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定 利用该编码格式读取所述目标文档时产生的乱码的过程为:
[0046] 将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱码模式中的 乱码字符逐个比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认为该数 据为乱码。
[0047] 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定 读取所述目标文档的编码格式的过程为:
[0048] 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例最低 的编码格式作为读取所述目标文档的编码格式。
[0049] 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定 读取所述目标文档的编码格式的过程为:
[0050] 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例低于 预设阈值的编码格式作为读取所述目标文档的编码格式。
[0051] 所述乱码比例为所述乱码字符占有效判断字符的比例。
[0052] 在每次利用一种编码格式读取目标文档时,所述编码格式属于所述编码格式集。
[0053] 本发明的上述技术方案相比现有技术具有以下优点:
[0054] (1)本发明所述的选择读取目标文档的编码格式的方法及其系统,首先通过参考 编码格式读取参考文档获得乱码模式,然后在对目标文档读取时,对于每种编码格式,将该 编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定利用该编码格 式读取所述目标文档时产生的乱码;再统计利用每种编码格式读取所述目标文档时产生的 乱码,将乱码比例最小的或乱码比例低于预设阈值的编码格式确定为读取所述目标文档的 编码格式。有效避免了现有技术中只是读出所述目标文档的前几个字节,判定这些字节的 值,从而得知其编码的格式,但是,有时候,目标文档的前几个字节并没有保留该文档的编 码格式信息,无法获得该文档的编码格式的问题。
[0055] (2)本发明所述的选择读取目标文档的编码格式的方法,所述获取乱码模式的过 程中,对于使用参考编码格式读取参考文档时获得的乱码字符串,删除了乱码字符串中的 非有效判断字符,使处理的字符数更少,进一步提高了处理速度,同也提高了获取乱码的准 确率。
[0056] (3)本发明所述的选择读取目标文档的编码格式的方法,按一定的比例取乱码字 符出现次数较高的乱码字符作为乱码模式,过滤了一些非常见的乱码字符,提高了后续选 择读取目标文档的编码格式的效率。
[0057] (4)本发明所述的选择读取目标文档的编码格式的方法,是依据乱码比例最小的 方法选择读取目标文档的编码格式,构思巧妙,方法简单,易于实现。
[0058] (5)本发明所述的选择读取目标文档的编码格式的方法,根据乱码比例小于预设 阈值时就将该编码格式作为读取文档的编码格式,避免了利用所有的编码格式进行读取目 标文档后才选择时需要较长的处理时间,进一步提高了选择读取目标文档的编码的效率。
[0059] (6)本发明所述的选择读取目标文档的编码格式的方法,每次利用一种编码格式 读取目标文档时读取部分内容,获得预先设置的有效判断字符数为止,使选取的所述有效 判断字符既不失代表性又进一步提高了选择读取目标文档的编码的效率。
[0060] (7)本发明所述的选择读取目标文档的编码格式的系统,利用本发明的选择读取 目标文档的编码格式的方法,有效避免了现有技术中只是读出所述目标文档的前几个字 节,判定这些字节的值,从而得知其编码的格式,但是,有时候,目标文档的前几个字节并没 有保留该文档的编码格式信息,无法获得该文档的编码格式的问题。

【专利附图】

【附图说明】
[0061] 为了使本发明的内容更容易被清楚的理解,下面结合附图,对本发明作进一步详 细的说明,其中,
[0062] 图1是本发明所述选择读取目标文档的编码格式的方法的流程图。

【具体实施方式】
[0063] 实施例一
[0064] 本实施例提供一种选择读取目标文档的编码格式的方法,其流程图如图1所示, 步骤包括:
[0065] 第一、通过至少一个参考编码格式读取参考文档,确定利用所述参考编码格式读 取参考文档时得到的全部或部分乱码模式。本实施例中所述文档为文本文档。所述参考编 码格式属于包含了全部编码格式的编码格式集。
[0066] 所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的 过程如下:对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中 的非有效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱 码模式。其中,所述非有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除 所述非有效判断字符以外的所有字符。
[0067] 本实施例所述获取乱码模式的过程中,对于使用参考编码格式读取参考文档时获 得的乱码字符串,删除了乱码字符串中的非有效判断字符,使处理的字符数更少,进一步提 高了处理速度,同也提高了获取乱码的准确率。
[0068] 优选地,统计有效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次 数的阈值,对于出现次数大于所述阈值的所有乱码字符,保存为乱码模式。
[0069] 本实施例按一定的比例取乱码字符出现次数较高的乱码字符作为乱码模式,过滤 了一些非常见的乱码字符,提高了后续选择读取目标文档的编码格式的效率。
[0070] 优选地,统计有效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符 出现次数倒序排列乱码字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为 乱码模式。取得排列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为 正数,50 < k < 100。在本实施例中,在本实施例中,取得前80%的乱码字符,这些乱码字符 就是需要获取的乱码模式。
[0071] 作为可替换的实施例,取得前k%的乱码字符,并将所取的乱码字符保存为乱码模 式。其中k为正数,所述k的取值范围为60彡k彡90。所述k可以选择60、70、75、90等不 同的值,根据用户的需求选择不同的值。
[0072] 第二、每次利用一种编码格式读取目标文档时读取部分内容,直到获得预先设置 的有效判断字符数为止。所述编码格式属于所述编码格式集,也就是说属于之前的参考编 码格式所属的编码格式集。这样参考编码格式和选择读取目标文档的编码格式属于相同的 集合,对于已经建立过乱码模式的编码格式,再次进行选择读取时,乱码模式对产生的乱码 的识别率高。若读取该目标文档的所有内容后仍未获得预先设置的有效判断字符数,则按 实际获取的有效判断字符数为准。所述有效判断字符数为50-1000。优选地,所述有效判 断字符数取100。在其他实施例中所述有效判断字符数可以取70、150、200、300、500、700、 1000等不同的值,根据用户的需求来选择不同的值。
[0073] 本实施例所述的选择读取目标文档的编码格式的方法,在读取目标文档时只读取 所述目标文档的部分内容,获得预先设置的有效判断字符数为止,使选取的所述有效判断 字符既不失代表性又进一步提高了选择读取目标文档的编码的效率。
[0074] 第三、对于每种编码格式,将该编码格式读取所述目标文档时产生的数据与确定 的乱码模式进行比较,确定利用该编码格式读取所述目标文档时产生的乱码。
[0075] 具体过程为:将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱 码模式中的乱码字符比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认 为该数据为乱码。
[0076] 第四、统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后 确定读取所述目标文档的编码格式。
[0077] 具体过程为:统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择 乱码比例最低的编码格式作为读取所述目标文档的编码格式。其中,所述乱码比例为所述 乱码字符占所读取的有效判断字符的比例。
[0078] 本实施例所述的选择读取目标文档的编码格式的方法,是依据乱码比例最小的方 法选择读取目标文档的编码格式,构思巧妙,方法简单,易于实现。
[0079] 优选地,统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码 比例低于预设阈值的编码格式作为读取所述目标文档的编码格式。
[0080] 本实施例所述的选择读取目标文档的编码格式的方法,根据乱码比例小于预设阈 值时就将该编码格式作为读取文档的编码格式,避免了利用所有的编码格式进行读取目标 文档后才选择时需要较长的处理时间,进一步提高了选择读取目标文档的编码的效率。
[0081] 本实施例所述的选择读取目标文档的编码格式的方法及其系统,首先通过参考编 码格式读取文档获得乱码模式,然后在对目标文档读取时,对于每种编码格式,将该编码格 式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定利用该编码格式读取 所述目标文档时产生的乱码;再统计利用每种编码格式读取所述目标文档时产生的乱码, 将乱码比例最小的或乱码比例低于预设阈值的编码格式确定为读取所述目标文档的编码 格式。有效避免了现有技术中只是读出所述目标文档的前几个字节,判定这些字节的值,从 而得知其编码的格式,但是,有时候,目标文档的前几个字节并没有保留该文档的编码格式 信息,无法获得该文档的编码格式的问题。
[0082] 实施例二
[0083] 第一、收集500个参考文档。通过至少一个参考编码格式读取参考文档,确定利用 所述参考编码格式读取参考文档时得到的全部或部分乱码模式。
[0084] 取上述参考文档中的一个文档使用UTF-8编码格式读取该文档,例如原文本 "中秋节,我们公司给我发了一千五百元过节费,大家都很happy ! ",文本文档的编码格 式为UTF-8,使用GB2312编码读取,得到"锘夸腑绉命会锛Φ令浠会令令哥令令令令浜 令令会令令令惧令杩会令璐癸令澶y会令藉Mappy锛命",删除非有效判断字符"yhappy", 剩余的字符都为有效判定字符,"锘夸腑绉会令锛令会浠会令会哥令令令会浜令会会会会会惧 :命杩令命璐癸命澶令#藉令锛会",再判断是否是乱码,进行计算。
[0085] 取上述参考文档中的一个文档使用GB2312编码格式读取该 文档,例如原文本"我的体重很重,75千克,我老婆的体重很轻,才38千 克。",文本文档的编码格式为GB2312,使用UTF-8编码读取,得至IJ "会η会令令会?令会丨会75$令x会会令会会会1?令会会令&会会(3令令38$会1会", 删除非有效判断字符"7538",剩余的字符都为有效判定字符, "Φη令令令命丨命?命x令令Φ命令令--Φ命令令命令0令命自命1令",再判断是否是乱码, 进行计算。
[0086] 对500个参考文档逐个分别使用UTF-8和GB2312编码格式读取,统计有效判断字 符中乱码字符的出现次数,取得前80%的乱码字符为"锛涓鉬紝鑽瑰旰浜鏈",将这些乱码 字符保存为乱码模式。
[0087] 第二、取编码格式UTF-8,使用编码格式UTF-8读取目标文档的部分内容,当读取 到第112个字符时,共获取100个有效判断字符。然后再使用编码格式GB2312读取所述目 标文档,获取100个有效判断字符。
[0088] 第三、分别对于编码格式UTF-8和编码格式GB2312,将该编码格式读取所述目标 文档时产生的数据与确定的乱码模式中的乱码字符进行比较,确定利用该编码格式读取所 述目标文档时产生的乱码字符。
[0089] 第四、使用编码格式UTF-8读取目标文档获取的数据,根据乱码模式统计100个有 效判定字符中乱码字符的个数为86,计算得到乱码字符的比例86%。使用编码格式GB2312 读取目标文档获取的数据,计算得到乱码字符的比例0%。则将乱码比例最小的编码格式 GB2312作为读取所述目标文档的编码格式。
[0090] 实施例三
[0091] 本实施例提供一种选择中文文本文档读取编码格式方法,包含两个阶段,第一个 阶段是通过统计得到乱码模式的过程,第二个阶段是选择目标文档的读取编码格式的过 程。
[0092] 本实施例中,非有效判断字符指英文字母(包含大小写)、数字和空白字符(包括空 格、制表符、换行符等);有效判断字符指非英文字母(包含大小写)、数字和空白字符(包括空 格、制表符、换行符等)。本实施例从编码格式集中选择一种文件编码格式作为参考编码格 式,编码格式集C = Ic1, c2,…,ck},其中ci是一种中文文本文档的编码格式,作为参考编码 格式去读取参考文档。
[0093] 第一个阶段,通过统计得到乱码模式的过程。
[0094] 第一步,收集中文训练语料,将中文训练语料库D = W1, d2,…,dn}作为参考文档 集,其中Cli是一个中文文本文档,即本实施例中的一个参考文档。文件Cl i的编码格式表示 为Hdi), Hdi) e C。读取文件Cli时会产出乱码的编码格式作为参考编码格式,所述参考编 码格式的集合表示为(V,可知< g O/(Ji),即当使用C/中的编码格式读取文件Cli时会 产生乱码。
[0095] 第二步,取得一个参考文档Cli,分别使用C/中的不同参考编码格式读取文件,得 到多个乱码字符串。
[0096] 第三步,删除乱码字符串中的非有效判断字符。
[0097] 第四步,统计乱码字符串中各乱码字符出现的次数。
[0098] 第五步,对于每一个参考文档Cli e D,重复第二到第四步,统计各乱码字符出现次 数。
[0099] 第六步,按乱码字符出现次数倒序排列乱码字符。
[0100] 第七步,取得前m%的乱码字符,这些乱码字符就是需要获取的乱码模式,该乱码 模式包含了编码格式集C = {Cl,C2,…,ck}下的常见乱码特征。m的取值大于等于50且小 于100,所述m取值在60和90之间。
[0101] 第二个阶段,选择目标文档的读取编码格式的过程。此处的目标文档也为中文文 本文档。本阶段有两种实现方式。实现方式一如下:
[0102] 第一步,从编码格式集C中取得一种编码格式Ci,使用编码格式Ci读取目标文档 的部分内容,获得前η个有效判断字符。若完成整个文件的读取时,获取的有效判断字符数 仍小于η,则以实际获取的字符数为准。假设该阶段最终获得了 m个有效判断字符。η的取 值大于等于10,取值区间[50, 1000]。
[0103] 第二步,根据乱码模式统计m个有效判定字符中乱码字符的个数m',计算得到乱 码比例m' /m。将编码格式Ci及乱码比例m' /m加入列表L。统计乱码字符的一种方法为: m'置零,依次读取m个字符中的每一个字符,如果该字符属于乱码模式,则m'加一;当遍历 m个字符后,m'中保存的值就是乱码字符数。
[0104] 第三步,对于编码格式集C中的其他编码格式,重复第一步到第二步。
[0105] 第四步,返回列表L中选择乱码比例最小的编码格式作为读取目标文档的编码格 式。
[0106] 作为可以替换的另外一种实施方式,第二个阶段也可如下进行:
[0107] 第一步,从编码格式集C中取得一种编码格式ci,使用编码格式Ci读取目标文档 的部分内容,获取前η个有效判断字符。若完成整个文件的读取时,获取的有效判断字符数 仍小于η,则以实际获取的字符数为准。假设该阶段最终获得了 m个有效判断字符。η的取 值大于等于10,取值区间为[50, 1000]。
[0108] 第二步,根据乱码模式统计m个有效判定字符中乱码字符的个数m',计算得到乱 码字符的比例m' /m。统计乱码字符的一种方法为:m'置零,依次读取m个字符中的每一个 字符,如果该字符属于乱码模式,则m'加一;当遍历m个字符后,m'中保存的值就是乱码字 符数。
[0109] 第三步,如果乱码比例m'/m大于等于阈值ξ,则重复第一步和第二步。如果乱码 比例小于阈值ξ,则返回编码格式C i。阈值ξ取值大于等于1%,阈值ξ取值在5%到50% 之间,本实施例中取15%。
[0110] 本实施例是通过统计得到乱码模式,根据乱码模式自动选择目标文档(为中文文 本文档)的读取编码格式。
[0111] 实施例四
[0112] 本实施例提供一种选择读取目标文档的编码格式的方法,包括第一阶段和第二阶 段,具体如下:
[0113] 第一个阶段,通过统计得到乱码模式。关注的编码集合是{UTF_8,GB2312}。
[0114] 第一步,收集1000个中文文本文档作为参考文档,将其作为中文训练语料,其中 500个文件是UTF-8编码,另500个文件是GB2312编码。本实施例中所述文本文档指后缀 为.txt的格式的文本文档。
[0115] 第二步,从中取得一个UTF-8编码的文件,使用GB2312编码读取文档,得到乱码字 符串。
[0116] 第三步,删除乱码字符串中的非有效判断字符。
[0117] 第四步,统计乱码字符串中各乱码字符出现的次数。
[0118] 第五步,对于每一个参考文档,重复第二到第四步,统计各乱码字符出现次数。
[0119] 第六步,按乱码字符出现次数倒序排列乱码字符。
[0120] 第七步,取得前80%的乱码字符,这些乱码字符就是需要获取的乱码模式,该乱码 模式包含了关注的编码集合{UTF-8,GB2312}下的常见乱码特征。得到的乱码模式为[命1 锛涓鉬紝鑽瑰浜鏈緯]。
[0121] 第二个阶段,选择目标文档的读取编码。
[0122] 第一步,从关注的编码集合{UTF_8,GB2312}中取得一种编码UTF-8,使用编码 UTF-8读取目标文档的前100个有效判断字符。
[0123] 第二步,根据乱码模式统计100个有效判定字符中乱码字符的个数为86,计算得 到乱码字符的比例86%。在列表L中加入条目(UTF-8, 86%)。
[0124] 第三步,对于编码GB2312,重复第一步和第二步。在列表L中加入条目 (GB2312, 0%)
[0125] 第四步,返回列表L中选择乱码比例最小的编码,即GB2312作为读取目标文档的 编码格式。可以看出,通过编码GB2312来读取目标文档最可能正确地读取该文档的内容。
[0126] 作为可替换的实施方式,第二个阶段还可以通过以下方式来实现,具体包括:
[0127] 第一步,从关注的编码集合{UTF_8,GB2312}中取得一种编码UTF-8,使用编码 UTF-8读取目标文档的前100个有效判断字符。
[0128] 第二步,根据乱码模式统计100个有效判定字符中乱码字符的个数为86,计算得 到乱码字符的比例86%。
[0129] 第三步,阈值ξ设置为15%,因为乱码比例86%大于阈值ξ,所以使用编码GB2312 重复第一步和第二步。得到乱码字符的比例〇%,小于阈值I,则返回编码GB2312,将GB2312 作为读取目标文档的编码格式。
[0130] 实施例五
[0131] 本实施例提供一种诜择读取目标f档的编码格式的系统,何括:
[0132] 第一、乱码模式生成模块,用于通过至少一个参考编码格式读取参考文档,确定利 用所述参考编码格式读取参考文档时得到的全部或部分乱码模式。所述参考编码格式属于 包含了全部或部分编码格式的编码格式集,且所述参考编码格式是该编码格式集中读取所 述参考文档时会产生乱码的编码格式。
[0133] 所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的 过程如下:对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中 的非有效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱 码模式。其中,所述非有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除 所述非有效判断字符以外的所有字符。
[0134] 本实施例所述获取乱码模式的过程中,对于使用参考编码格式读取参考文档时获 得的乱码字符串,删除了乱码字符串中的非有效判断字符,使处理的字符数更少,进一步提 高了处理速度,同也提高了获取乱码的准确率。
[0135] 优选地,统计有效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次 数的阈值,对于出现次数大于所述阈值的所有乱码字符,保存为乱码模式。
[0136] 本实施例按一定的比例取乱码字符出现次数较高的乱码字符作为乱码模式,过滤 了一些非常见的乱码字符,为后续选择读取目标文档的编码格式的准确性提供了很好的依 据。
[0137] 优选地,统计有效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符 出现次数倒序排列乱码字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为 乱码模式。取得排列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为 正数,50 < k < 100。在本实施例中,在本实施例中,取得前80%的乱码字符,这些乱码字符 就是需要获取的乱码模式。
[0138] 在其他实施例中,取得前k%的乱码字符,并将所取的乱码字符保存为乱码模式。 其中k为正数,所述k的取值范围为60 < k < 90。所述k可以选择60、70、75、90等不同的 值,根据用户的需求选择不同的值。
[0139] 第二、目标文档读取模块,用于每次利用一种编码格式读取目标文档。该模块以获 得预先设置的有效判断字符数为止,所述编码格式属于所述参考编码格式所属的所述编码 格式集。若读取所有文档的所有内容后仍未获得预先设置的有效判断字符数,则按实际获 取的有效判断字符数为准。所述有效判断字符数为50-1000。优选地,所述有效判断字符数 取100。在其他实施例中所述有效判断字符数可以取70、150、200、300、500、700、1000等不 同的值,根据用户的需求来选择不同的值。
[0140] 第三、读取乱码模块,用于对于每种编码格式,将该编码格式读取所述目标文档时 产生的数据与确定的乱码模式进行比较,确定利用该编码格式读取所述目标文档时产生的 乱码。
[0141] 具体过程为:将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱 码模式中的乱码字符比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认 为该数据为乱码。
[0142] 优选地,对于使用编码格式读取目标文档时获得的乱码字符串,删除乱码字符串 中的非有效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取 乱码模式。
[0143] 第四、读取编码格式选择模块,用于统计利用每种编码格式读取所述目标文档时 产生的乱码,并进行比较,然后确定读取所述目标文档的编码格式。
[0144] 具体过程为:统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择 乱码比例最低的编码格式作为读取所述目标文档的编码格式。
[0145] 优选地,统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码 比例低于预设阈值的编码格式作为读取所述目标文档的编码格式。其中所述乱码比例为所 述乱码字符占所读取的有效判断字符的比例。
[0146] 本实施例所述的选择读取目标文档的编码格式的系统,利用本发明的选择读取目 标文档的编码格式的方法,有效避免了现有技术中只是读出所述目标文档的前几个字节, 判定这些字节的值,从而得知其编码的格式,但是,有时候,目标文档的前几个字节并没有 保留该文档的编码格式信息,无法获得该文档的编码格式的问题。
[0147] 显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对 于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或 变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或 变动仍处于本发明创造的保护范围之中。
[0148] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序 产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实 施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机 可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产 品的形式。
[0149] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程 图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一 流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算 机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理 器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生 用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能 的装置。
[0150] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特 定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指 令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或 多个方框中指定的功能。
[0151] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计 算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或 其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图 一个方框或多个方框中指定的功能的步骤。
[0152] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造 性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优 选实施例以及落入本发明范围的所有变更和修改。
【权利要求】
1. 一种选择读取目标文档的编码格式的方法,其特征在于,包括: 通过至少一个参考编码格式读取参考文档,确定利用所述参考编码格式读取参考文档 时得到的全部或部分乱码模式; 每次利用一种编码格式读取目标文档; 对于每种编码格式,将该编码格式读取所述目标文档时产生的数据与确定的乱码模式 进行比较,确定利用该编码格式读取所述目标文档时产生的乱码; 统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取 所述目标文档的编码格式。
2. 根据权利要求1所述的选择读取目标文档的编码格式的方法,其特征在于,所述参 考编码格式属于包含了全部或部分编码格式的编码格式集,且所述参考编码格式是该编码 格式集中读取所述参考文档时会产生乱码的编码格式。
3. 根据权利要求1或2所述的选择读取目标文档的编码格式的方法,其特征在于,通过 所有的参考编码格式读取参考文档,确定利用所述参考编码格式读取参考文档时得到的全 部或部分乱码模式。
4. 根据权利要求1-3中任一所述的选择读取目标文档的编码格式的方法,其特征在 于,所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的过程如 下: 对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中的非有 效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱码模 式。
5. 根据权利要求4所述的选择读取目标文档的编码格式的方法,其特征在于,所述非 有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除所述非有效判断字符 以外的所有字符。
6. 根据权利要求4所述的选择读取目标文档的编码格式的方法,其特征在于,统计有 效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次数的阈值,对于出现次数 大于所述阈值的所有乱码字符,保存为乱码模式。
7. 根据权利要求4所述的选择读取目标文档的编码格式的方法,其特征在于,统计有 效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符出现次数倒序排列乱码 字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为乱码模式。
8. 根据权利要求7所述的选择读取目标文档的编码格式的方法,其特征在于,取得排 列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为正数,50彡k彡100。
9. 根据权利要求1-8中任一所述的选择读取目标文档的编码格式的方法,其特征在 于,所述每次利用一种编码格式读取目标文档时读取部分内容,直到获得预先设置的有效 判断字符数为止;若读取所述文档的所有内容后仍未获得预先设置的有效判断字符数,则 按实际获取的有效判断字符数为准。
10. 根据权利要求9中任一所述的选择读取目标文档的编码格式的方法,其特征在于, 有效判断字符数为50-1000。
11. 根据权利要求1-10中任一所述的选择读取目标文档的编码格式的方法,其特征在 于,将该编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定利用 该编码格式读取所述目标文档时产生的乱码的过程为: 将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱码模式中的乱码 字符比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认为该数据为乱码。
12. 根据权利要求1-11中任一所述的选择读取目标文档的编码格式的方法,其特征在 于,统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取所 述目标文档的编码格式的过程为: 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例最低的编 码格式作为读取所述目标文档的编码格式。
13. 根据权利要求1-11中任一所述的选择读取目标文档的编码格式的方法,其特征在 于,统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取所 述目标文档的编码格式的过程为: 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例低于预设 阈值的编码格式作为读取所述目标文档的编码格式。
14. 根据权利要求12-13中任一所述的选择读取目标文档的编码格式的方法,其特征 在于:所述乱码比例为所述乱码字符占有效判断字符的比例。
15. 根据权利要求1-14中任一所述的选择读取目标文档的编码格式的方法,其特征在 于:在每次利用一种编码格式读取目标文档时,所述编码格式属于所述编码格式集。
16. -种选择读取目标文档的编码格式的系统,其特征在于,包括: 乱码模式生成模块,用于通过至少一个参考编码格式读取参考文档,确定利用所述参 考编码格式读取参考文档时得到的全部或部分乱码模式; 目标文档读取模块,用于每次利用一种编码格式读取目标文档; 读取乱码模块,用于对于每种编码格式,将该编码格式读取所述目标文档时产生的数 据与确定的乱码模式进行比较,确定利用该编码格式读取所述目标文档时产生的乱码; 读取编码格式选择模块,用于统计利用每种编码格式读取所述目标文档时产生的乱 码,并进行比较,然后确定读取所述目标文档的编码格式。
17. 根据权利要求16所述的选择读取目标文档的编码格式的系统,其特征在于,所述 参考编码格式属于包含了全部或部分编码格式的编码格式集,且所述参考编码格式是该编 码格式集中读取所述参考文档时会产生乱码的编码格式。
18. 根据权利要求16或17所述的选择读取目标文档的编码格式的系统,其特征在于, 通过所有的参考编码格式读取参考文档,确定利用所述参考编码格式读取参考文档时得到 的全部或部分乱码模式。
19. 根据权利要求16-18中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,所述确定利用所述参考编码格式读取参考文档时得到的全部或部分乱码模式的过程 如下: 对于使用参考编码格式读取参考文档时获得的乱码字符串,删除乱码字符串中的非有 效判断字符,获取有效判断字符;统计有效判断字符中乱码字符的出现次数,获取乱码模 式。
20. 根据权利要求19所述的选择读取目标文档的编码格式的系统,其特征在于,所述 非有效判断字符指英文字母、数字和空白字符;所述有效判断字符指除所述非有效判断字 符以外的所有字符。
21. 根据权利要求19所述的选择读取目标文档的编码格式的系统,其特征在于,统计 有效判断字符中乱码字符的出现次数,获取乱码模式时,预先设定次数的阈值,对于出现次 数大于所述阈值的所有乱码字符,保存为乱码模式。
22. 根据权利要求19所述的选择读取目标文档的编码格式的系统,其特征在于,统计 有效判断字符中乱码字符的出现次数,获取乱码模式时,按乱码字符出现次数倒序排列乱 码字符;取得排列在前的部分乱码字符,并将所取的乱码字符保存为乱码模式。
23. 根据权利要求22所述的选择读取目标文档的编码格式的系统,其特征在于, 取得排列在前k%的乱码字符,并将所取的乱码字符保存为乱码模式,其中k为正数, 50 彡k彡 100。
24. 根据权利要求16-23中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,所述每次利用一种编码格式读取目标文档时读取部分内容,直到获得预先设置的有 效判断字符数为止;若读取所述文档的所有内容后仍未获得预先设置的有效判断字符数, 则按实际获取的有效判断字符数为准。
25. 根据权利要求24所述的选择读取目标文档的编码格式的系统,其特征在于,有效 判断字符数为50-1000。
26. 根据权利要求16-25中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,将该编码格式读取所述目标文档时产生的数据与确定的乱码模式进行比较,确定利 用该编码格式读取所述目标文档时产生的乱码的过程为: 将通过每个编码格式读取所述目标文档时产生的数据逐个与所述乱码模式中的乱码 字符比较,如果乱码字符包含此数据,则判定此数据为乱码,否则,则不认为该数据为乱码。
27. 根据权利要求16-26中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取 所述目标文档的编码格式的过程为: 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例最低的编 码格式作为读取所述目标文档的编码格式。
28. 根据权利要求16-26中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,统计利用每种编码格式读取所述目标文档时产生的乱码,并进行比较,然后确定读取 所述目标文档的编码格式的过程为: 统计利用每种编码格式读取所述目标文档时产生的乱码比例,选择乱码比例低于预设 阈值的编码格式作为读取所述目标文档的编码格式。
29. 根据权利要求27-28中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,所述乱码比例为所述乱码字符占有效判断字符的比例。
30. 根据权利要求16-29中任一所述的选择读取目标文档的编码格式的系统,其特征 在于,在每次利用一种编码格式读取目标文档时,所述编码格式属于所述编码格式集。
【文档编号】G06F17/22GK104516862SQ201310456276
【公开日】2015年4月15日 申请日期:2013年9月29日 优先权日:2013年9月29日
【发明者】叶茂, 万巍, 金立峰, 王元龙 申请人:北大方正集团有限公司, 北京方正阿帕比技术有限公司, 北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1