KKFileView(七)

2021SC@SDUSC

文本文件编码方式的区分

1)   ASCII和ANSI编码:这两个编码是相互兼容的,如果字节的最高位是0(0-7F),二进制形如0XXX XXXX,则表达的是ASCII字符也就是USA-ASCII字符表内容。如果字节的最高位是1(80-FE),则就是ANSI(GBK)编码,注意,这时候是两个字节表达一个汉字,也就是说两个字节的最高位都是1的字节代表一个汉字,二进制形如1XXX XXXX, 1XXX XXXX 。因此ANSI字符编码是兼容ASCII编码的。

 在ANSI编码下,如果文本字符都是西文字符,则也可以认为是ASCII编码,当有连续高为是1的字节串出现的时候,这是可以判定为ANSI或GBK编码。GBK编码一定是两个高位均为1的字节表达一个汉字。ANSI则是一个字节表达一个字符,这个字节高为可以是1或0。

(2) UTF-8编码。utf-8是一种多字节编码的字符集,表示一个Unicode字符时,它可以是1个至多个字节。即在文本全部是ASCII字符时utf-8是和ASCII一致的(utf-8向下兼容ASCII)。最多6个字节表达一个字符,utf-8字节流如下所示:
             1字节:0xxxxxxx 
             2字节:110xxxxx 10xxxxxx 
             3字节:1110xxxx 10xxxxxx 10xxxxxx  ,一般汉字用这个3字节表达
             4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
             5字节:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
        注意,在UTF-8编码中,多种长度是混合存在的,即,一个字穿里面可能有1,2,3,等字节长度表达的字符同时存在 。因此在判断时候带来一定的难度。

(3)带有BOM的UTF-8,这个文本文件的头部带有三个先导标志字节0xEF, 0xBB,0xBF,通过判断这个标志,可以判断出这个文本文件是UTF-8编码。

(4)UTF-16LE,字节流是little endian ,这是标准UNICODE编码文本,是双字节等长编码。文本文件头部带有先导志字节0xFF 0xFE,通过判断这个标志,可以判断出这个文本文件是UTF-16LE编码。

(5) UTF-16BE, 字节流是big  endian,这是另一种UNICODE编码文本,是双字节等长编码。文本文件头部带有先导志字节0xFE  0xFF,通过判断这个标志,可以判断出这个文本文件是UTF-16BE编码。

(6)gbk,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的, 即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。

(7)GB2312-80,编码的编码范围是高位0xa1-0xfe,低位是 0xa1-0xfe ,其中汉字范围为 0xb0a1 和 0xf7fe,如果只是简单地判断汉字,则只要查看高字节是否大于等于0xa1就可以了,还有就是,全角字符的高字节统统等于0xa3,所以很容易可以区别出全角字符来。

(8)Big5:BIG5是目前中国台湾和中国香港地区普遍使用的一种繁体汉字的编码标准,包括440个符号,一级汉字5401个,二级汉字7652个,共计13060个汉字,所谓一级汉字与二级汉字对应于常用汉字和不常用汉字。是GBK的子集,双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E及0xA1-0xFE。

猜你喜欢

转载自blog.csdn.net/eldrida1/article/details/121663915