CN103970913A - Utf-8与ansi编码识别方法以及装置 - Google Patents

Utf-8与ansi编码识别方法以及装置 Download PDF

Info

Publication number
CN103970913A
CN103970913A CN201410232089.4A CN201410232089A CN103970913A CN 103970913 A CN103970913 A CN 103970913A CN 201410232089 A CN201410232089 A CN 201410232089A CN 103970913 A CN103970913 A CN 103970913A
Authority
CN
China
Prior art keywords
byte
array
utf
file
preorder
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410232089.4A
Other languages
English (en)
Other versions
CN103970913B (zh
Inventor
姚方谋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Shiyuan Electronics Thecnology Co Ltd
Original Assignee
Guangzhou Shiyuan Electronics Thecnology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Shiyuan Electronics Thecnology Co Ltd filed Critical Guangzhou Shiyuan Electronics Thecnology Co Ltd
Priority to CN201410232089.4A priority Critical patent/CN103970913B/zh
Publication of CN103970913A publication Critical patent/CN103970913A/zh
Application granted granted Critical
Publication of CN103970913B publication Critical patent/CN103970913B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/126Character encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了UTF-8与ANSI编码识别方法,用于识别区分文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。本发明实施例方法包括:S1:获取文件的数据流;S2:将所述数据流以字节的形式存储为数组;S3:判断所述数组是否存在前序字节,若是,则删除所述前序字节后执行步骤S4,若否,则执行步骤S4;S4:判断所述数组中是否存在第一字节,若是,则删除所述第一字节后执行步骤S5,若否,则执行步骤S5;S5:判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8。本发明实施例还提供UTF-8与ANSI编码识别装置。

Description

UTF-8与ANSI编码识别方法以及装置
技术领域
本发明涉及编码领域,尤其涉及UTF-8与ANSI编码识别方法以及装置。
背景技术
ASCII是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。但是由于ASCII码只有128个字符,无法表示世界上所有语言字符。不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI(American NationalStandards Institute,美国国家标准学会的标准码)。
UTF-8(8-bit Unicode Transformation Format,万国码)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示UNICODE(单一码、统一码)标准中的任何字符,且其编码中的第一个字节与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。一般用到的文本UNICODE码值只有两个字节,可以表述65536个字符,足以表述世界上所有通用字符。所有我们通常用到的文本,UTF-8编码方式,最多用3个字节足够。
UTF-8编码如下:
1字节0xxxxxxx
2字节110xxxxx 10xxxxxx(0xC080-0xDFBF0x80-0x7FF)
3字节1110xxxx 10xxxxxx 10xxxxxx
(0xE08080-0xEFBFBF0x800-0xFFFF)
BOM(字节顺序标记,Byte Order Mark)常被用来当作标示文件,是UTF-8、UTF-16或UTF-32编码的记号,位于文件流最开始的几个字节。其中,UTF-8的BOM为EF BB BF,而UNICODE的BOM为FF FE或者FE FF。
在现有的应用中,ANSI和UTF-8都经常被使用到。虽然ANSI和UTF-8的编码方式不同,但是编码方法类似甚至有重叠的编码区域,有一定概率将UTF-8编码格式的文本文件错误地当做ANSI编码格式文件来解析显示。如果文本文件或者文本数据流使用了错误的编码方式解析,会造成字符解析错误,从而造成文本显示乱码。例如,在TXT文档中输入“联通”2字,当TXT文档中一切字符都在C0≤AA(第一个字节)≤DF、80≤BB(第二个字节)≤BF这个范围时,notepad(纯文本编辑器)都无法确认文档的格式,没有自动依照UTF-8格式来显示。而"联通"就是C1AA CD A8,刚好在上面的范围内,所以不能正常显现。
因此,亟需一种能够识别区分UTF-8与ANSI的不同编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况的方法。
发明内容
本发明实施例提供了一种UTF-8与ANSI编码识别方法以及装置,能够识别区分文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。
本发明实施例提供的一种UTF-8与ANSI编码识别方法,包括:
S1:获取文件的数据流;
S2:将所述数据流以字节的形式存储为数组,所述数组包括字节元素,所述字节元素由字节组成;
S3:判断所述数组是否存在前序字节,若是,则删除所述前序字节后执行步骤S4,若否,则执行步骤S4;
S4:判断所述数组中是否存在第一字节,若是,则删除所述第一字节后执行步骤S5,若否,则执行步骤S5,所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素;
S5:判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8;
所述第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,所述第二字节由两个字节组成;
所述第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,所述第三字节由三个字节组成。
可选地,步骤S4具体包括:
遍历所述数组,若所述数组中存在第一字节,则删除所述第一字节,直到遍历结束后执行步骤S5,若所述数组中不存在第一字节,则在遍历结束后执行步骤S5;
所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素。
可选地,步骤S5具体包括:
遍历所述数组,若所述数组中存在第二字节或第三字节,则所述文件的编码方式为ANSI,若所述数组中不存在第二字节或第三字节,则所述文件的编码方式为UTF-8。
可选地,步骤S3具体包括:
S31:判断所述数组是否存在前序字节,若是,则执行步骤S32,若否,则执行步骤S4;
S32:判断所述前序字节是否为UTF-8或UNICODE的BOM,若是,则执行步骤S33,若否,则删除所述前序字节后执行步骤S4;
S33:若所述前序字节为UTF-8的BOM,则所述文件的编码方式为UTF-8,若所述前序字节为UNICODE的BOM,则所述文件的编码方式为UNICODE。
可选地,所述方法还包括:
按照所述文件的编码方式解析显示所述文件。
本发明实施例中提供的一种UTF-8与ANSI编码识别装置,包括:
获取模块,用于获取文件的数据流;
存储模块,用于将所述数据流以字节的形式存储为数组,所述数组包括字节元素,所述字节元素由字节组成;
第一判断模块,用于判断所述数组是否存在前序字节,若是,则删除所述前序字节后触发第二判断模块,若否,则触发第二判断模块;
所述第二判断模块,用于判断所述数组中是否存在第一字节,若是,则删除所述第一字节后触发第三判断模块,若否,则触发第三判断模块,所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素;
所述第三判断模块,用于判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8;
所述第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,所述第二字节由两个字节组成;
所述第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,所述第三字节由三个字节组成。
可选地,所述第二判断模块具体包括:
第一遍历单元,用于遍历所述数组,直到遍历结束后触摸第三判断模块;
第二判断单元,用于在执行所述第一遍历单元的过程中判断所述数组中是否存在第一字节,若是,则删除所述第一字节;
所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素。
可选地,所述第三判断模块具体包括:
第二遍历单元,用于遍历所述数组;
第三判断单元,用于在执行所述第二遍历单元的过程中判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8。
可选地,所述第一判断模块具体包括:
第一判断单元,用于判断所述数组是否存在前序字节,若是,则触发辨识单元,若否,则触发第二判断模块;
所述辨识单元,用于判断所述前序字节是否为UTF-8或UNICODE的BOM,若是,则触发区分单元,若否,则删除所述前序字节后触发第二判断模块;
所述区分单元,用于若所述前序字节为UTF-8的BOM,则确定所述文件的编码方式为UTF-8,若所述前序字节为UNICODE的BOM,则确定所述文件的编码方式为UNICODE。
可选地,所述UTF-8与ANSI编码识别装置还包括:
解析显示模块,用于按照所述文件的编码方式解析显示所述文件。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,S1:获取文件的数据流;S2:将所述数据流以字节的形式存储为数组,所述数组包括字节元素,所述字节元素由字节组成;S3:判断所述数组是否存在前序字节,若是,则删除所述前序字节后执行步骤S4,若否,则执行步骤S4;S4:判断所述数组中是否存在第一字节,若是,则删除所述第一字节后执行步骤S5,若否,则执行步骤S5,所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素;S5:判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8;所述第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,所述第二字节由两个字节组成;所述第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,所述第三字节由三个字节组成。在本发明实施例中,通过对文件数据流以字节的形式进行拆开分析,分别对第一字节、第二字节、第三字节进行判断筛选,从而根据ANSI和UTF-8的特性来判断所述文件使用的编码方式,能够识别区分所述文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。
附图说明
图1为本发明实施例中UTF-8与ANSI编码识别方法一个实施例流程图;
图2为本发明实施例中UTF-8与ANSI编码识别方法另一个实施例流程图;
图3为本发明实施例中UTF-8与ANSI编码识别装置一个实施例结构图;
图4为本发明实施例中UTF-8与ANSI编码识别装置另一个实施例结构图。
具体实施方式
本发明实施例提供了UTF-8与ANSI编码识别方法以及装置,用于识别区分文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,本发明实施例中UTF-8与ANSI编码识别方法一个实施例包括:
S1:获取文件的数据流;
在需要识别某个文件的编码方式前,需要先获取该文件的数据流。
S2:将该数据流以字节的形式存储为数组;
获取该文件的数据流后,可以将该数据流以字节的形式存储为数组,该数组包括字节元素,该字节元素由字节组成。
S3:判断该数组是否存在前序字节,若是,则执行步骤S301,若否,则执行步骤S4;
将该数据流以字节的形式存储为数组之后,可以判断该数组是否存在前序字节,若是,则执行步骤S301,若否,则执行步骤S4。
S301:删除该前序字节后执行步骤S4;
当该数组中存在前序字节时,删除该前序字节后执行步骤S4。
S4:判断该数组中是否存在第一字节,若是,则执行步骤S401,若否,则执行步骤S5;
经过步骤S3之后,该数组中不再存在前序字节,此时,可以判断该数组中是否存在第一字节,若是,则执行步骤S401,若否,则执行步骤S5,该第一字节为该数组中字节元素的数值处于预置的第一编码范围内的字节元素。
S401:删除该第一字节后执行步骤S5;
当该数组中存在第一字节时,删除该第一字节后执行步骤S5。
S5:判断该数组中是否存在第二字节或第三字节,若是,则执行步骤S501,若否,则执行步骤S502;
经过步骤S4之后,该数组中不再存在第一字节,此时,可以判断该数组中是否存在第二字节或第三字节,若是,则执行步骤S501,若否,则执行步骤S502。
需要说明的是,该第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,该第二字节由两个字节组成;该第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,该第三字节由三个字节组成。
S501:该文件的编码方式为ANSI;
当该数组中存在第二字节或第三字节时,该文件的编码方式为ANSI。
S502:该文件的编码方式为UTF-8。
当该数组中不存在第二字节或第三字节时,则该文件的编码方式为UTF-8。
本实施例中,前面所说的UTF-8与ANSI编码识别方法步骤为:S1:获取文件的数据流;S2:将该数据流以字节的形式存储为数组,该数组包括字节元素,该字节元素由字节组成;S3:判断该数组是否存在前序字节,若是,则删除该前序字节后执行步骤S4,若否,则执行步骤S4;S4:判断该数组中是否存在第一字节,若是,则删除该第一字节后执行步骤S5,若否,则执行步骤S5,该第一字节为该数组中字节元素的数值处于预置的第一编码范围内的字节元素;S5:判断该数组中是否存在第二字节或第三字节,若是,则该文件的编码方式为ANSI,若否,则该文件的编码方式为UTF-8;该第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,该第二字节由两个字节组成;该第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,该第三字节由三个字节组成。在本实施例中,通过对文件数据流以字节的形式进行拆开分析,分别对第一字节、第二字节、第三字节进行判断筛选,从而根据ANSI和UTF-8的特性来判断该文件使用的编码方式,能够识别区分该文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。
为便于理解,下面对本发明实施例中的UTF-8与ANSI编码识别方法进行详细描述,请参阅图2,本发明实施例中UTF-8与ANSI编码识别方法另一个实施例包括:
201、获取文件的数据流;
在需要识别某个文件的编码方式前,需要先获取该文件的数据流。
202、将该数据流以字节的形式存储为数组;
获取该文件的数据流后,可以将该数据流以字节的形式存储为数组,该数组包括字节元素,该字节元素由字节组成。
需要说明的是,该数据流可以为二进制的数据流,然后通过二进制的字节形式存储为数组,该数组可以为八进制、十进制或十六进制。具体此处不作限定。
203、判断该数组是否存在前序字节,若是,则执行步骤204,若否,则执行步骤207;
将该数据流以字节的形式存储为数组之后,可以判断该数组是否存在前序字节,若是,则执行步骤204,若否,则执行步骤207。
需要说明的是,数组由字节元素组成,而字节元素由字节组成,数组中可能存在前序字节,这些前序字节主要排在数据流的前头部分,即最开始的若干个字节。这些前序字节主要作为字节顺序标记(BOM)存在,通过前序字节的标记可以快速地获知该文件是以哪种编码格式(可以为UTF-8或UNICODE)编码的。
204、判断该前序字节是否为UTF-8或UNICODE的BOM,若是,则执行步骤206,若否,则执行步骤205;
在获知该数组存在前序字节之后,可以判断该前序字节是否为UTF-8或UNICODE的BOM,若是,则执行步骤206,若否,则执行步骤205。其中UTF-8的BOM为EF BB BF(十六进制),而UNICODE的BOM为FF FE(十六进制)或者FE FF(十六进制,下文类似表达均为十六进制的,不再赘述)。
205、删除该前序字节后执行步骤207;
若该前序字节并不是UTF-8的BOM,也不是UNICODE的BOM,则删除该前序字节后执行步骤207。
206、若该前序字节为UTF-8的BOM,则该文件的编码方式为UTF-8,若该前序字节为UNICODE的BOM,则该文件的编码方式为UNICODE;
当该前序字节为UTF-8或UNICODE的BOM时,则可以知道,若该前序字节为UTF-8的BOM,则该文件的编码方式为UTF-8,若该前序字节为UNICODE的BOM,则该文件的编码方式为UNICODE。
例如,当该前序字节为EF BB BF时,则该文件的编码方式为UTF-8,当该前序字节为FF FE或者FE FF时,则该文件的编码方式为UNICODE。
需要说明的是,通过对前序字节的识别判断可以快速地获知到该文件的编码方式,而无需再执行其它复杂的识别判断,在很多情况下可以提高识别效率,节省识别时间。
207、遍历该数组,判断该数组中是否存在第一字节,若是,则执行步骤208,若否,则在遍历结束后执行步骤209;
在通过对该数组的前序字节的判断或处理之后,可以确保此时该数组不存在前序字节,此时可以遍历该数组,判断该数组中是否存在第一字节,若是,则执行步骤208,若否,则在遍历结束后执行步骤209。可以理解的是,通过遍历的运算,可以确保做到在遍历结束后,该数组中的字节元素均被访问了一遍,且每个字节元素仅访问一遍,可以避免重复访问和访问遗漏的问题,从而可以最大程度地保证该数组的所有第一字节均被找出。
需要说明的是,该第一字节为该数组中字节元素的数值处于预置的第一编码范围内的字节元素。例如,假如设定该第一编码范围可以为0x00-0x7F(十六进制,下文类似表达均为十六进制的,不再赘述),则该第一字节为UTF-8的1字符的码值范围,在该码值范围中UTF-8和ANSI的编码方式通用,与UNICODE编码的0x00-0x7F码值一样,因此均可以按照UNICODE码值来解析显示,不会产生乱码。
208、删除该第一字节,直到遍历结束后执行步骤209;
在遍历该数组的过程中,每当发现一个该第一字节,则删除该第一字节,直到遍历结束后执行步骤209。
209、遍历该数组,判断该数组中是否存在第二字节或第三字节,若是,则执行步骤210,若否,则执行步骤211;
在遍历查找该数组中的第一字节之后,可以确保此时该数组中不存在第一字节,此时可以判断该数组中是否存在第二字节或第三字节,若是,则执行步骤210,若否,则执行步骤211。
需要说明的是,该第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,该第二字节由两个字节组成;该第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,该第三字节由三个字节组成。
需要说明的是,在文件的数据流编码中,需要显示出来的字符通过若干个字节的组合或者单个字节来表示,如1个字节、2个字节、3个字节等,这些组合在一起的字节可以认为是一个字节元素,即该数组中的字节元素。因此,该字节元素也可以由1个字节、2个字节、3个字节来组成。在步骤209中,遍历该数组时,是对每个字节元素进行遍历,而并非对每个字节进行遍历(若该字节元素由一个字节组成,则对该字节进行遍历访问)。所以,可以理解的是,该第二字节和该第三字节均属于字节元素,其中第二字节为2个字节组成的字节元素,而第三字节则为由3个字节组成的字节元素。
从UTF-8和ANSI的编码特性中可以分析看出来,只要合理地预置该第二编码范围和该第三编码范围,可以通过第二字节和第三字节来识别这两种编码方式。例如,预置第二编码范围为0xC080-0xDFBF,而第三编码范围为0xE08080-0xEFBFBF,当存在任意一个第二字节或第三字节时,则表示该数组中存在一个2字节的字节元素在0xC080-0xDFBF范围之外或一个3字节的字节元素在0xE08080-0xEFBFBF范围之外。通过查看UTF-8的2字符和3字符的编码方式可以知道,UTF-8中的2字节的字节元素均在0xC080-0xDFBF范围内,3字节的字节元素均在0xE08080-0xEFBFBF范围内。因此该文件的编码方式不可能为UTF-8,因此可以确定该文件的编码方式为ANSI。可以理解的是,上述0xC080-0xDFBF范围(第二编码范围)和0xE08080-0xEFBFBF范围(第三编码范围)并不是唯一的范围,此处仅用于举例说明,实际应用中可以通过预置不同的范围达到同一效果,此处不作限定。
210、该文件的编码方式为ANSI;
当该数组中存在第二字节或第三字节时,则可以确定该文件的编码方式为ANSI。
211、该文件的编码方式为UTF-8;
当该数组中不存在第二字节或第三字节时,则可以确定该文件的编码方式为UTF-8。
212、按照该文件的编码方式解析显示该文件。
在确定了该文件的编码方式之后,可以按照该文件的编码方式解析显示该文件。
在本实施例中,通过对文件数据流以字节的形式进行拆开分析,分别对第一字节、第二字节、第三字节进行判断筛选,从而根据ANSI和UTF-8的特性来判断该文件使用的编码方式,能够识别区分该文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。更进一步地,通过对前序字节的判断和识别,若该前序字节符合条件,可以快速地确定该文件是UTF-8还是UNICODE的编码方式,可以提高了识别编码方式的效率,减少识别所用的时间。
在本实施例中,该文件可以表示以二进制方式存储的可以显示字符的文件。常见的有电子书txt文件,歌词lrc文件,视频字幕文件等。
为便于理解,根据图2所描述的实施例,下面以一个实际应用场景对本发明实施例中的UTF-8与ANSI编码识别方法进行描述:
应用场景一:
1、假设获取一个文件的数据流后,存储的数组为(EF BB BF)(CC FF)(EFB0BB),可以看出,该数组由前序字节、一个2个字节的字节元素、一个3字节的字节元素组成。
2、判断该前序字节(EF BB BF)为UTF-8的BOM,则可以确定该文件的编码方式为UTF-8。
应用场景二:
1、假设获取一个文件的数据流后,存储的数组为(FF FE)(CC FF)(EF B0BB),可以看出,该数组由前序字节、一个2个字节的字节元素、一个3字节的字节元素组成。
2、判断该前序字节(FF FE)为UNICODE的BOM,则可以确定该文件的编码方式为UNICODE。
应用场景三:
1、假设获取一个文件的数据流后,存储的数组为(F0FE)(CC FF)(EF B0BB),可以看出,该数组由前序字节、一个2个字节的字节元素、一个3字节的字节元素组成。
2、无法识别该前序字节(F0FE),既不是UTF-8的BOM,也不是UNICODE的BOM,则删除该前序字节,此时数组变为(CC FF)(EF B0BB)。
3、遍历该数组,该数组不存在0x00-0x7F的字节元素,因此无需处理。
4、遍历该数组,发现该数组中(CC FF)在0xC080-0xDFBF的范围内,且(EF B0BB)在0xE08080-0xEFBFBF范围内,则可以确定该文件的编码方式为UTF-8。
应用场景四:
1、假设获取一个文件的数据流后,存储的数组为(0D)(CC FF)(FF B0BB),可以看出,该数组由一个1个字节的字节元素、一个2个字节的字节元素、一个3字节的字节元素组成。
2、该数组不存在前序字节,直接进行下一步。
3、遍历该数组,该数组中的(0D)在0x00-0x7F的范围内,则删除(0D),该数组变成(CC FF)(FF B0BB)。
4、遍历该数组,发现该数组中(CC FF)在0xC080-0xDFBF的范围内,但是(FF B0BB)在0xE08080-0xEFBFBF范围外,因此可以确定该文件的编码方式为ANSI。
可以理解的是,上述四个应用场景相对简单同时也相对基础,该四个应用场景可以具体到电子书浏览器读取电子书、播放器访问歌词文件等更为具体的场景中,可以知道的是,在具体的场景中处理的方式类似,不再赘述。
上面主要描述了UTF-8与ANSI编码识别方法,下面将对UTF-8与ANSI编码识别装置进行详细的描述,请参阅图3,本发明实施例中UTF-8与ANSI编码识别装置一个实施例包括:
获取模块301,用于获取文件的数据流;
存储模块302,用于将该数据流以字节的形式存储为数组,该数组包括字节元素,该字节元素由字节组成;
第一判断模块303,用于判断该数组是否存在前序字节,若是,则删除该前序字节后触发第二判断模块304,若否,则触发第二判断模块304;
该第二判断模块304,用于判断该数组中是否存在第一字节,若是,则删除该第一字节后触发第三判断模块305,若否,则触发第三判断模块305,该第一字节为该数组中字节元素的数值处于预置的第一编码范围内的字节元素;
该第三判断模块305,用于判断该数组中是否存在第二字节或第三字节,若是,则该文件的编码方式为ANSI,若否,则该文件的编码方式为UTF-8。
需要说明的是,该第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,该第二字节由两个字节组成;该第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,该第三字节由三个字节组成。
本实施例中,首先,获取模块301获取文件的数据流;然后,存储模块302将该数据流以字节的形式存储为数组;再之,第一判断模块303判断该数组是否存在前序字节,若是,则删除该前序字节后触发第二判断模块304,若否,则触发第二判断模块304;而该第二判断模块304判断该数组中是否存在第一字节,若是,则删除该第一字节后触发第三判断模块305,若否,则触发第三判断模块305;最后,该第三判断模块305判断该数组中是否存在第二字节或第三字节,若是,则该文件的编码方式为ANSI,若否,则该文件的编码方式为UTF-8。在本实施例中,通过对文件数据流以字节的形式进行拆开分析,分别对第一字节、第二字节、第三字节进行判断筛选,从而根据ANSI和UTF-8的特性来判断该文件使用的编码方式,能够识别区分该文件到底是UTF-8还是ANSI的编码方式,避免因使用错误的编码方式解析文件而出现文件显示乱码的情况。
为便于理解,下面对本发明实施例中的UTF-8与ANSI编码识别装置进行详细描述,请参阅图4,本发明实施例中UTF-8与ANSI编码识别装置另一个实施例包括:
获取模块401,用于获取文件的数据流;
存储模块402,用于将该数据流以字节的形式存储为数组,该数组包括字节元素,该字节元素由字节组成;
第一判断模块403,用于判断该数组是否存在前序字节,若是,则删除该前序字节后触发第二判断模块404,若否,则触发第二判断模块404;
该第二判断模块404,用于判断该数组中是否存在第一字节,若是,则删除该第一字节后触发第三判断模块405,若否,则触发第三判断模块405,该第一字节为该数组中字节元素的数值处于预置的第一编码范围内的字节元素;
该第三判断模块405,用于判断该数组中是否存在第二字节或第三字节,若是,则该文件的编码方式为ANSI,若否,则该文件的编码方式为UTF-8。
需要说明的是,该第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,该第二字节由两个字节组成;该第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,该第三字节由三个字节组成。
本实施例中该第二判断模块404具体包括:
第一遍历单元4041,用于遍历该数组,直到遍历结束后触摸第三判断模块405;
第二判断单元4042,用于在执行该第一遍历单元4041的过程中判断该数组中是否存在第一字节,若是,则删除该第一字节。
需要说明的是,该第一遍历单元4041可以遍历整个数组,使得在判断该数组中是否存在第一字节时,不会重复访问数组中的字节元素,也不会遗漏数组中的字节元素。
本实施例中该第三判断模块405具体包括:
第二遍历单元4051,用于遍历该数组;
第三判断单元4052,用于在执行该第二遍历单元的过程中判断该数组中是否存在第二字节或第三字节,若是,则该文件的编码方式为ANSI,若否,则该文件的编码方式为UTF-8。
本实施例中该第一判断模块403具体包括:
第一判断单元4031,用于判断该数组是否存在前序字节,若是,则触发辨识单元4032,若否,则触发第二判断模块404;
该辨识单元4032,用于判断该前序字节是否为UTF-8或UNICODE的BOM,若是,则触发区分单元4033,若否,则删除该前序字节后触发第二判断模块404;
该区分单元4033,用于若该前序字节为UTF-8的BOM,则确定该文件的编码方式为UTF-8,若该前序字节为UNICODE的BOM,则确定该文件的编码方式为UNICODE。
需要说明的是,第一判断单元4031、辨识单元4032和区分单元4033共同组成了对该前序字节进行判断识别的机构,可以通过对前序字节的识别来初步确认该文件的编码方式是否为UTF-8或者UNICODE,有利于提高识别的效率。
本实施例中该UTF-8与ANSI编码识别装置还包括:
解析显示模块406,用于按照该文件的编码方式解析显示该文件。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种UTF-8与ANSI编码识别方法,其特征在于,包括:
S1:获取文件的数据流;
S2:将所述数据流以字节的形式存储为数组,所述数组包括字节元素,所述字节元素由字节组成;
S3:判断所述数组是否存在前序字节,若是,则删除所述前序字节后执行步骤S4,若否,则执行步骤S4;
S4:判断所述数组中是否存在第一字节,若是,则删除所述第一字节后执行步骤S5,若否,则执行步骤S5,所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素;
S5:判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8;
所述第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,所述第二字节由两个字节组成;
所述第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,所述第三字节由三个字节组成。
2.根据权利要求1所述的方法,其特征在于,步骤S4具体包括:
遍历所述数组,若所述数组中存在第一字节,则删除所述第一字节,直到遍历结束后执行步骤S5,若所述数组中不存在第一字节,则在遍历结束后执行步骤S5;
所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素。
3.根据权利要求1所述的方法,其特征在于,步骤S5具体包括:
遍历所述数组,若所述数组中存在第二字节或第三字节,则所述文件的编码方式为ANSI,若所述数组中不存在第二字节或第三字节,则所述文件的编码方式为UTF-8。
4.根据权利要求1所述的方法,其特征在于,步骤S3具体包括:
S31:判断所述数组是否存在前序字节,若是,则执行步骤S32,若否,则执行步骤S4;
S32:判断所述前序字节是否为UTF-8或UNICODE的BOM,若是,则执行步骤S33,若否,则删除所述前序字节后执行步骤S4;
S33:若所述前序字节为UTF-8的BOM,则所述文件的编码方式为UTF-8,若所述前序字节为UNICODE的BOM,则所述文件的编码方式为UNICODE。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
按照所述文件的编码方式解析显示所述文件。
6.一种UTF-8与ANSI编码识别装置,其特征在于,包括:
获取模块,用于获取文件的数据流;
存储模块,用于将所述数据流以字节的形式存储为数组,所述数组包括字节元素,所述字节元素由字节组成;
第一判断模块,用于判断所述数组是否存在前序字节,若是,则删除所述前序字节后触发第二判断模块,若否,则触发第二判断模块;
所述第二判断模块,用于判断所述数组中是否存在第一字节,若是,则删除所述第一字节后触发第三判断模块,若否,则触发第三判断模块,所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素;
所述第三判断模块,用于判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8;
所述第二字节为字节元素的数值处于预置的第二编码范围外的字节元素,所述第二字节由两个字节组成;
所述第三字节为字节元素的数值处于预置的第三编码范围外的字节元素,所述第三字节由三个字节组成。
7.根据权利要求6所述的UTF-8与ANSI编码识别装置,其特征在于,所述第二判断模块具体包括:
第一遍历单元,用于遍历所述数组,直到遍历结束后触摸第三判断模块;
第二判断单元,用于在执行所述第一遍历单元的过程中判断所述数组中是否存在第一字节,若是,则删除所述第一字节;
所述第一字节为所述数组中字节元素的数值处于预置的第一编码范围内的字节元素。
8.根据权利要求6所述的UTF-8与ANSI编码识别装置,其特征在于,所述第三判断模块具体包括:
第二遍历单元,用于遍历所述数组;
第三判断单元,用于在执行所述第二遍历单元的过程中判断所述数组中是否存在第二字节或第三字节,若是,则所述文件的编码方式为ANSI,若否,则所述文件的编码方式为UTF-8。
9.根据权利要求6所述的UTF-8与ANSI编码识别装置,其特征在于,所述第一判断模块具体包括:
第一判断单元,用于判断所述数组是否存在前序字节,若是,则触发辨识单元,若否,则触发第二判断模块;
所述辨识单元,用于判断所述前序字节是否为UTF-8或UNICODE的BOM,若是,则触发区分单元,若否,则删除所述前序字节后触发第二判断模块;
所述区分单元,用于若所述前序字节为UTF-8的BOM,则确定所述文件的编码方式为UTF-8,若所述前序字节为UNICODE的BOM,则确定所述文件的编码方式为UNICODE。
10.根据权利要求6至9中任一项所述的UTF-8与ANSI编码识别装置,其特征在于,所述UTF-8与ANSI编码识别装置还包括:
解析显示模块,用于按照所述文件的编码方式解析显示所述文件。
CN201410232089.4A 2014-05-28 2014-05-28 Utf‑8与ansi编码识别方法以及装置 Active CN103970913B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410232089.4A CN103970913B (zh) 2014-05-28 2014-05-28 Utf‑8与ansi编码识别方法以及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410232089.4A CN103970913B (zh) 2014-05-28 2014-05-28 Utf‑8与ansi编码识别方法以及装置

Publications (2)

Publication Number Publication Date
CN103970913A true CN103970913A (zh) 2014-08-06
CN103970913B CN103970913B (zh) 2018-02-27

Family

ID=51240411

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410232089.4A Active CN103970913B (zh) 2014-05-28 2014-05-28 Utf‑8与ansi编码识别方法以及装置

Country Status (1)

Country Link
CN (1) CN103970913B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199867A (zh) * 2014-08-18 2014-12-10 中国科学院软件研究所 一种解决文件名乱码问题的zip文件解压缩方法
CN104391993A (zh) * 2014-12-15 2015-03-04 浪潮(北京)电子信息产业有限公司 一种识别网页编码方法及系统
CN105468724A (zh) * 2015-11-20 2016-04-06 上海斐讯数据通信技术有限公司 数据流编码的预测方法及预测装置
CN106686408A (zh) * 2016-12-06 2017-05-17 青岛海信电器股份有限公司 一种Teletext信息的传输方法和装置
CN107943761A (zh) * 2017-11-14 2018-04-20 北京思特奇信息技术股份有限公司 一种txt文档编码字符集的校验方法及系统
CN110096481A (zh) * 2019-04-19 2019-08-06 福建天晴数码有限公司 文件编码的识别方法及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030236912A1 (en) * 2002-06-24 2003-12-25 Microsoft Corporation System and method for embedding a sreaming media format header within a session description message
CN1862525A (zh) * 2005-05-11 2006-11-15 上海迪比特实业有限公司 一种编码转换方法
CN101526963A (zh) * 2009-04-17 2009-09-09 深圳华为通信技术有限公司 网页编码识别方法、装置和终端设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030236912A1 (en) * 2002-06-24 2003-12-25 Microsoft Corporation System and method for embedding a sreaming media format header within a session description message
CN1862525A (zh) * 2005-05-11 2006-11-15 上海迪比特实业有限公司 一种编码转换方法
CN101526963A (zh) * 2009-04-17 2009-09-09 深圳华为通信技术有限公司 网页编码识别方法、装置和终端设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
STUDENTHT: "如何判断一个文本文件内容的编码格式UTF-8?ANSI(GBK)", 《新浪博客HTTP://BLOG.SINA.COM.CN/MAIN_V5/RIA/PRINT.HTML?BLOG_ID=BLOG_4F4F9E6F01019RU7》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199867B (zh) * 2014-08-18 2017-05-17 中国科学院软件研究所 一种解决文件名乱码问题的zip文件解压缩方法
CN104199867A (zh) * 2014-08-18 2014-12-10 中国科学院软件研究所 一种解决文件名乱码问题的zip文件解压缩方法
CN104391993A (zh) * 2014-12-15 2015-03-04 浪潮(北京)电子信息产业有限公司 一种识别网页编码方法及系统
CN105468724A (zh) * 2015-11-20 2016-04-06 上海斐讯数据通信技术有限公司 数据流编码的预测方法及预测装置
CN106686408B (zh) * 2016-12-06 2022-04-29 海信视像科技股份有限公司 一种Teletext信息的传输方法和装置
CN106686408A (zh) * 2016-12-06 2017-05-17 青岛海信电器股份有限公司 一种Teletext信息的传输方法和装置
CN107943761A (zh) * 2017-11-14 2018-04-20 北京思特奇信息技术股份有限公司 一种txt文档编码字符集的校验方法及系统
CN110096481A (zh) * 2019-04-19 2019-08-06 福建天晴数码有限公司 文件编码的识别方法及计算机可读存储介质
CN113064863A (zh) * 2019-04-19 2021-07-02 福建天晴数码有限公司 自动识别文件编码的方法及计算机可读存储介质
CN113064862A (zh) * 2019-04-19 2021-07-02 福建天晴数码有限公司 基于正反向字词库的文件编码识别方法及存储介质
CN110096481B (zh) * 2019-04-19 2021-03-23 福建天晴数码有限公司 文件编码的识别方法及计算机可读存储介质
CN113064862B (zh) * 2019-04-19 2022-06-07 福建天晴数码有限公司 基于正反向字词库的文件编码识别方法及存储介质
CN113064863B (zh) * 2019-04-19 2022-06-07 福建天晴数码有限公司 自动识别文件编码的方法及计算机可读存储介质

Also Published As

Publication number Publication date
CN103970913B (zh) 2018-02-27

Similar Documents

Publication Publication Date Title
CN103970913A (zh) Utf-8与ansi编码识别方法以及装置
US9158742B2 (en) Automatically detecting layout of bidirectional (BIDI) text
CN103885608A (zh) 一种输入方法及系统
CN101950285A (zh) 利用统计学方法对汉字的本国语读音串转换系统及其方法
KR20180105546A (ko) 클레임 요소 명사의 요소 명사 참조 번호를 획득하기 위한 요소 명사 참조 번호 획득방법
CN107153469B (zh) 为输入数据搜索匹配候选项的方法、数据库创建方法、装置及计算机程序产品
EP2653981A1 (en) Natural language processing device, method, and program
US10120843B2 (en) Generation of parsable data for deep parsing
JP7040155B2 (ja) 情報処理装置、情報処理方法及びプログラム
KR20100059825A (ko) 분석용 디스플레이 문서 준비 장치
KR102015454B1 (ko) 문서 자동 편집 방법
US9208134B2 (en) Methods and systems for tokenizing multilingual textual documents
TW201530322A (zh) 字型處理方法及字型處理系統
CN111931491B (zh) 领域词典构建方法及装置
EP3312740B1 (en) Data search program, data search device, and data search method
CN110717323B (zh) 文档分章方法及装置、终端和计算机可读存储介质
US10789410B1 (en) Identification of source languages for terms
CN102723067B (zh) 一种字符显示方法和装置
US20160253374A1 (en) Data file writing method and system, and data file reading method and system
CN104050156A (zh) 用于提取最大名词短语的装置、方法以及电子设备
CN104933030A (zh) 一种维吾尔语拼写检查方法及装置
JP5629543B2 (ja) 文字列変換装置、文字列変換方法、コンピュータプログラムおよび記録媒体
CN104991656A (zh) 一种输入汉语词组的方法
CN114492303A (zh) 电子书的排版处理方法、电子设备及存储介质
CN113886748A (zh) 网页内容的编辑信息生成、信息输出方法、装置及设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant