文本文件的编码格式探测方法和装置的制作方法

文档序号:6338531阅读:198来源:国知局
专利名称:文本文件的编码格式探测方法和装置的制作方法
技术领域
本发明属于文件处理领域,特别是涉及一种文本文件的编码格式探测方法。
背景技术
文本文件的字符编码规定了字符的存储方式,要获得文本内容并进行显示就必须知道这些文本文件在读入内存后的存储方式,即文件的编码格式。目前常用的文本文件编码格式有ASCII、GB2312、GBK、GB18030、BIG5、 IS0-8859-1、UCS-2、UTF-16、UTF-8等,这些编码的格式、编码方式、长度均不同。在进行文本文件处理时,需要对这些不同的编码进行编码转换,防止文本文件在显示时产生乱码。在对文本文件进行编码转换前,需要对文本文件的编码格式进行探测,常用的编码探测的方法为根据文本文件对应的编码字节序标识(BOM),即文本的前几个字节进行判定。例如前三个字节为EFBBBF,则为UTF-8编码格式;若前两个字节为FEFF则为UTF-16BE 编码格式,若为FFFE则为UTF-16LE编码格式等。然而,这样的方法并不总是可行的,对于有些编码格式,例如ASCII、GB2312和UTF7编码等都没有编码字节序标识,对于这样的编码格式,通常采用给一个默认的编码格式进行编码转换,但默认的编码格式与文本文件的编码格式不一致则会使文本文件显示为乱码。

发明内容
本发明所要解决的技术问题是提供一种文本文件的编码格式探测方法和装置,对于符合编码字节序标识及不符合编码字节序标识的文字编码进行判断,并转换成符合的编码,减少乱码的产生。本发明公开了一种文本文件的编码格式探测方法,包含有下列步骤步骤一划分文本文件为多个文字段;步骤二 如果当前文字段的中前4个字节的字节编码大于0x00且小于0x7F,则当前文字段的编码格式为ASCII ;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式;步骤三读取下一文字段中的字节进行探测,直至全部文本文件转换完毕。本发明还公开了一种文本文件的编码格式探测装置,包含有下列模块划分模块,划分文本文件为多个文字段;探测模块,如果当前文字段中的前4个字节的字节编码大于0x00且小于0x7F,则当前文字段的编码格式为ASCII ;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式;循环模块,读取下一文字段中的字节进行探测,直至全部文本文件转换完毕。本发明文本文件的编码格式探测方法和装置,按照字节编码所采用的编码字节长度所对应的编码格式分组,对不符合编码字节序标识的文字编码进行分组判断,对各种不同的编码格式进行编码转换,不仅避免了使显示时的编码格式与文本文件的字节编码不一
3致时产生的乱码,而且使文本文件能够更快速地进行编码转换。


图1是本发明的文本文件的编码格式探测方法的流程图;图2是本发明另一实施例的文本文件的编码格式探测方法的流程图。
具体实施例方式由于本发明公开了一种文本文件的编码格式探测方法和装置,特别是包含一种编码转换的方法。在本发明的实施例中所利用到的一些关于编码字节序标识、字节、字符集, 是利用现有技术来达成,故在下述说明中,并不作完整描述,在先说明。本发明公开了一种文本文件的编码格式探测方法,如图1所示,其具体步骤包括如下步骤101 首先,先从文本文件(如WorcUtxt等)中读取既定长度的文本文件,然后划分文本文件为若干个文字段,为了获取最快的速度,会根据文本文件的大小进行分段解析,同时由于文件本身存在混和编码的情况,对文字分段在一定程度上也可以解决混合编码的问题。步骤102 如果当前文字段中的前4个字节的字节编码均大于0x00且小于0x7F, 则当前文字段的编码格式为ASCII ;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式。本实施例中,首先对单字节的ASCII编码进行特殊处理。若当前文字段的中前4 个字节的字节编码是大于0x00且小于0x7F,则确定当前文字段的编码格式为ASCII ;也就是说若每个字节都是ASCII码,那么全文就是ASCII编码。否则按照编码格式所采用的编码字节长度将各种编码格式进行分组,采用分组中的编码格式对当前文字段中的字节进行编码格式分组内探测。按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测时,对各分组采用轮询的方式进行探测,按照各分组中的每种编码分别对当前文本段中的字节编码进行校验。按各种编码字符集的编码长度,将不同的编码分为二个格式组,其中,第一组为{UTF-8,SJIS,GB18030, EUCJP, EUCKR, EUCTff, Big5, GB2312, GBK},为多字节字符集(MBCS)。第二组为{winl251,K0I8-R,Latin5,MacCyrillic,IBM866,IBM855, IS0-8859-1, Latin7,winl253,Latinl},为单字节字符集(SBCS)及拉丁字符集。以第一组多字节字符集中GB2312字符集为例进行判别,GB2312字符集又称为 GB2312-80字符集,在GB2312字符集中会对所收汉字进行“分区”处理,每区含有94个汉字 /符号。这种表示方式也称为区位码,它是用双字节表示的,两个字节中前面的字节为第一字节,后面的字节为第二字节,形式上称第一字节为“高位字节”,而称第二字节为“低位字节”。“高位字节”使用T OxAl 0xF7 (把01 87区的区号加上OxAO),而“低位字节”使用了 OxAl OxFE (把01 94加上OxAO),以表格形式表示即为87列、94行。以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,即表格中的第 16列第1行则区位码是1601,在大多数计算机程序中,高位字节和低位字节分别加OxAO得到程序的汉字处理编码OxBOAl。计算公式是0xB0 = 0xA0+16,0xAl = 0xA0+l。根据以上分析,在进行编码探测时,对于单独的一个字节的编码小于127的,则作为与ASCII兼容的,可以先过滤掉,而对于连续两个字节都大于127的,只需要判断每两个连续的字节是否符合GB2312编码的要求,即每次取两个连续的字节,其中第一个字节是否在OxAl 0xF7的范围内,而第二个字节取值是否在OxAl OxFE范围内。若所有的字节都满足这个要求,则此前文本段中的字节编码属于GB2312字符集。又以BIG5字符集为例BIG5字符集使用了双字节储存方法,同样以两个字节来编码一个字,即第一个字节为“高位字节”,第二个字节为“低位字节”。BIG5字符集的“高位字节”的编码范围OxAl 0xF9,“低位字节”的编码范围0x40 0x7E及OxAl OxFE。再以UTF-8字符集为例UTF_8字符集使用可变长度字节来储存Unicode字符,例如ASCII字母继续使用1字节储存;重音文字、希腊字母或西里尔字母等使用2字节来储存;常用的汉字就要使用3字节;辅助平面字符则使用4字节。因此由此得知,其编码范围不同,其字节数量不同,即可判断是属于哪一字符集, 而其他多字节字符集亦以此类推。在以第二组中的单字节字符集为例进行判别,单字节亦即表示其字节数只有一个,以IS0-8859-1字符集为例IS0-8859-l字符集中将每一个字节直接作为一个UNICODE 字符。比如,
这两个字节,通过IS0-8859-1转化为字符串时,将直接得到
两个UNICODE字符,即"0D"。也就是说。当进行IS0-8859-1字符集的编码探测时,只需要将每个字节作为UNICODE字符进行转换。若每个字节都能按照单字节转换成UNICODE字符,则为IS0-8859-1字符集的编码。又以K0I8-R字符集为例K0I8_R字符集编码表如下
K0I8-R
—|0123456789ABCDEF
Γ

SP ! "#$%&' ( ) * + , - . / 丁 O 1 2 3 4 5 6 7 8 9 ; < = > ? TaABCDEFGHIJKLMNO
Tpqrstuvvxyz [\] λ _6、abcdefghijklmno
7ρ q r s t u ν w χ y ζ { | }
8I 「Π L」卜"1丁丄 + ···· ι
9I _ 圍[■ · 7 < > NBSP j 。 2 · +
丁一I r e 「『,11 LLL」」』~P
T Ih Ih H E HI HI ^τπτ^^^ + + ΗΓ^"
C ο a Suh e φ γ xhhkjimho
权利要求
1.一种文本文件的编码格式探测方法,其特征在于,包含有下列步骤步骤一划分文本文件为多个文字段;步骤二 如果当前文字段中的前4个字节的字节编码大于0x00且小于0x7F,则当前文字段的编码格式为ASCII ;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式;步骤三读取下一文字段中的字节并进行探测,重复步骤二,直至全部文本文件转换完毕。
2.根据权利要求1所述的文本文件的编码格式探测方法,其特征在于所述步骤一之后还包括如果对当前文字段的字节进行探测得到的是编码字节序标识,则根据编码字节序标识进行探测,将探测结果转换为目标编码,并读取下一文字段中的字节进行探测,否则转到步骤二,直至全部文本文件转换完毕。
3.根据权利要求1所述的文本文件的编码格式探测方法,其特征在于所述步骤一中对当前文字段中的字节进行探测时,对当前文字段的前4个字节进行判断,如果判断的结果不为空字符串,则确定所得的字节存在编码格式,否则所得的字节无编码格式。
4.根据权利要求1所述的文本文件的编码格式探测方法,其特征在于所述编码格式分组包括多字节字符集、单字节字符集和拉丁字符集。
5.根据权利要求4所述的文本文件的编码格式探测方法,其特征在于所述多字节字符集包括UTF-8、SJIS、GB18030、EUCJP, EUCKR、EUCTW、Big5、GB2312 和 GBK 字符集。
6.根据权利要求4所述的文本文件的编码格式探测方法,其特征在于所述单字节字符集包括wmi251、koi8r和Latin5字符集。
7.根据权利要求4所述的文本文件的编码格式探测方法,其特征在于所述拉丁字符集包括Windows-1252和Latinl字符集。
8.根据权利要求4至7中任一权利要求所述的文本文件的编码格式探测方法,其特征在于所述按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测时,对各分组采用轮询的方式进行探测,按照各编码格式分组中的每种编码分别对当前文本段中的字节编码进行校验;如果当前文本段中的字节编码与分组中的特定编码匹配,则当前文本段中的字节编码为所述特定编码,否则选用分组中下一种编码格式对当前文本段中的字节编码进行校验。
9.一种文本文件的编码格式探测装置,其特征在于,包含有下列模块划分模块,划分文本文件为多个文字段;探测模块,如果当前文字段中的前4个字节的字节编码大于0x00且小于0x7F,则当前文字段的编码格式为ASCII ;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式;循环模块,读取下一文字段中的字节进行探测,并根据探测结果转换为各个文字段对应匹配的编码格式,直至全部文本文件转换完毕。
全文摘要
本发明公开了一种文本文件的编码格式探测方法和装置,属于文件处理领域。该方法包含划分文本文件为多个文字段;如果当前文字段中的前4个字节的字节编码大于0x00且小于0x7F,则当前文字段的编码格式为ASCII;否则按照字节编码所采用的编码字节长度在对应的编码格式分组中进行探测,根据探测结果转换当前文字段为对应匹配的编码格式;读取下一文字段中的字节进行探测,直至全部文本文件转换完毕。本发明对不符合编码字节序标识的文字编码进行分组判断,对各种不同的编码格式进行编码转换,避免了使显示时的编码格式与文本文件的字节编码不一致时产生的乱码,对文本文件更快速地进行编码转换。
文档编号G06F17/22GK102567293SQ20101058612
公开日2012年7月11日 申请日期2010年12月13日 优先权日2010年12月13日
发明者宋久元, 展永定 申请人:汉王科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1