视频gb和big5是什么意思,GB跟BIG5
GB码和BIG5是国内常用的两种编码集。mainland China使用GB码,港台地区使用BIG5。每个代码由2个字符组成,高字节在前,低字节在后。下面,我给大家介绍一下Python实现的编码转换程序。关于编码的一些知识可以在网上找到,这里就不赘述了。GB代码是mainland China使用的代码集。前一个是为GB-2312编的,只有常用词,字数有限。后来,国家制定了新的GBK码,汉字的数量已经达到了2万多个。GBK完全兼容原来的GB-2312编码,这意味着GB2312编码在GBK上是完全一样的。这里介绍的换算是基于GBK的,所以适用范围广。GBK码不仅包括原始的GB-2312码,还包括许多简化码和繁体字,以及许多符号和生僻字。GBK编码的范围是:高字节从0x81到0xFE,低字节从0x40到0xFE,不包括0x7F。这样,如果我们把它排列成一个长方形,看起来就像xx7F少了一行。
编码的位置
那么,你如何找到一个GBK代码呢?当我们得到一个代码时,我们如何判断它是否是GBK码?如果是,我们如何定位?
判断GBK码应该很简单。我们只需要根据它的有效范围来判断。比如:
如果0x81=ch1=0xFE并且(0x40=ch2=0x7E或0x7E=CH2=0x Fe):#是gb字符
这里,ch1和ch2分别是字符的高字节和低字节。
如何定位(为什么要后期定位)?首先介绍一下码表。码表是把所有的代码放在一起形成的,你可以把它放在一个文件里(这里是把代码放在一个文件里)。我们在存储代码的时候,把有实际意义的代码放在一起(因为有些组合不存在),按照字节大小的顺序排列。根据GBK的编码范围,我们可以想象一个二维坐标,纵坐标为高字节,横坐标为低字节,每个交点为一个汉字,占两个字节。这样一行的汉字数应该是0xFE-0x40 1-1=190(加1是因为必须包含0x40。1减少是因为要去掉7F)。定位时,我们首先从高位字节中减去0x81,得到纵坐标偏移。从低位字节中减去0x40,获得横坐标偏移。汉字的偏移量是用纵坐标的偏移量乘以每个汉字的个数,再加上横坐标的偏移量得到的。乘以2获得字节偏移量。那么定位算法就是:
索引=((ch1-0x 81)* 190(CH2-0x 40)-(CH2/128))* 2
上述算法中有-(ch2/128)。这是因为GBK没有7F代码,所以当ch2小于7F时,ch2/128=0,这意味着7F不计算在内。当ch2大于7F时,ch2/128=1,说明7F计算过度,应该去掉。由于一个汉字有两个字节,所以应该乘以二。这样,我们就得到GBK汉字在码表中的一个字节位置。
BIG5是香港和台湾省使用的代码集。其范围为:高字节从0xA0到0xFE,低字节从0x40到0x7E,以及0xA1到0xFE。判断一个汉字是否BIG5编码,可以如上判断字符的编码范围。如何定位?然后想象一下,所有的代码都排列在一个二维坐标中,纵坐标是高字节,横坐标是低字节。这样一行的汉字数:(0x7e-0x401) (0xfe-0xA11)=157。然后定位算法分为两块,即:
如果0x 40=CH2=0x7E:#是big5 char
索引=((ch1-0xA1)*157 (ch2-0x40))*2
elif0xa 1=CH2=0x Fe:#是big5 char
索引=((ch1-0xa 1)* 157(CH2-0xa 1 63))* 2
对于第二个块,在计算偏移量的时候,有两个块的值,所以在计算后一个的时候不要忘记前面还有一个块的值。0x7E-0x40 1=63 .
编码转换
以上,我们已经可以得到GBK汉字和BIG5的字节位置。然后就可以开始转换了。我以为有专门的算法进行转换,可以简单的根据两个代码的差异计算出结果,但是没有这样的算法。真正的办法是建立一个转换码表文件。也就是说,对于GBK码表,把原来位置的GBK汉字改成相应的BIG5汉字。对于BIG5码表,将原位置的BIG5汉字改为相应的GBK汉字。这样,由于原来汉字的位置没有改变,代码就变成了要转换的代码。通过计算原汉字的位置,取出转换码表中该汉字位置对应的字符,从而完成转换(这就是为什么需要编码定位)。确实程序简单,但真正细致的工作是建立转换码表。我们需要从GBK到BIG5的码表文件和从BIG5到GBK的码表文件。好在这项工作已经完成,这类资料网上都能查到。我在网上找到了这个对应的转换码表,于是用Python完成了一个编码转换程序。(想要这个节目的可以去作者主页http://pyrecord.126.com找)
介绍如何使用Python模块进行代码转换
文件名为pygb2big.py.命令行:
python pygb 2 big . py[-u][-b -g]input file output file .
它的主要命令行参数是:-b,表示将GBK转换成BIG5;-g,意思是把BIG5换算成GBK;-u,显示程序的用法。Inputfile是要处理的输入文件;输出文件是结果文件。它有三个转换码表文件,其中GBK2big.txt是GBK到big5的对照表;BIG2gbk.txt是BIG到GBKcf的对照表。另一个是big2GBK-f.txt,只提供不使用。它将BIG5转换为传统的gbk代码。
有了这个转换模块,我们可以把它应用到任何需要代码转换的地方。当然,这只是从GBK到BIG5的转换。如果有其他转换码表文件,我们也可以实现其他转换功能。