vps 同时翻墙和做网站,网站开发项目描述范文,网站如何开通微信支付接口,惠州做公司网站GB码与BIG5是中国人常用的两种编码集。GB码为大陆使用#xff0c;BIG5为香港与台湾使用。每个编码都由2个字符构成#xff0c;高字节在前#xff0c;低字节在后。下面我将使用Python实现的编码转换的程序向大家作一个介绍。关于编码的一些知识大家可以去网上查找#xff0c…GB码与BIG5是中国人常用的两种编码集。GB码为大陆使用BIG5为香港与台湾使用。每个编码都由2个字符构成高字节在前低字节在后。下面我将使用Python实现的编码转换的程序向大家作一个介绍。关于编码的一些知识大家可以去网上查找本人不再赘述。 GB码是大陆使用的编码集。以前使用的为GB-2312编程它只有常用字字数有限。后国家制定了新的GBK编码汉字已经达到了2万多。GBK完全兼容原GB-2312编码也就是说一个GB2312的编码在GBK上是一模一样的。这里所介绍的转换是以GBK为基础的因此适用性很广。GBK编码中不仅包括了原GB-2312编码同时也包括了许多简码的繁体码同时还有许多的符号与不常用汉字。GBK编码的范围是高字节从0x81到0xFE低字节从0x40到0xFE同时不包括0x7F。这样如果我们将其排成一个矩形看上去就少了xx7F一根线。
编码的定位那么如何定位一个GBK码呢当我们拿到一个编码时如何判断是不是一个GBK码如果是GBK码如何定位它的位置呢
判断一个GBK码应该比较简单我们只要根据它的有效范围进行判定即可。如: if 0x81ch10xFE and (0x40ch20x7E or 0x7Ech20xFE): #is gb char
这里ch1和ch2分别是一个字符的高字节和低字节。
如何定位为什么要定位我们在后面讲首先介绍一下码表。码表是所有编码放在一起形成的你可以将其放在文件中这里讲述的是将编码放在文件中。我们在存放编码时是将有实际意义的编码放在了一起因为有一些组合是不存在的而且是按字节大小的顺序放的。根据GBK的编码范围我们可以设想一个二维坐标纵坐标是高字节横坐标是低字节每一个交叉点上是一个汉字占两个字节。这样一行上的汉字个数应该为0xFE-0x401-1190加1是因为要把0x40也算进去。减1是因为要把7F去掉。定位时我们先用高字节减去0x81得到纵坐标偏移量。用低字节减去0x40得到横坐标偏移量。用纵坐标偏移量乘以每个汉字个数加上横坐标偏移量就得到汉字的偏移量。再乘以2得到字节的偏移量。那么定位算法为: index((ch1-0x81)*190(ch2-0x40)-(ch2/128))*2
上面的算法中有-(ch2/128)。这是因为GBK中没有7F码因此当ch2小于7F时ch2/1280则表示7F没有计算在内。而当ch2大于7F时ch2/1281则表示多算了7F一值因此要去掉。由于一个汉字有两个字节故要乘以2。这样我们就得到一个GBK汉字在码表中的字节位置了。
BIG5是香港和台湾地区使用的编码集。它的范围为高字节从0xA0到0xFE低字节从0x40到0x7E和0xA1到0xFE两部分。判断一个汉字是否是BIG5编码可以如上对字符的编码范围判断即可。如何定位呢那么也想象所有编码排列为一个二维坐标纵坐标是高字节横坐标是低字节。这样一行上的汉字个数(0x7E-0x401)(0xFE-0xA11)157。那么定位算法分两块为: if 0x40ch20x7E: #is big5 char index((ch1-0xA1)*157(ch2-0x40))*2 elif 0xA1ch20xFE: #is big5 char index((ch1-0xA1)*157(ch2-0xA163))*2
对于第二块计算偏移量时因为有两块数值所以在计算后面一段值时不要忘了前面还有一段值。0x7E-0x40163。
编码转换上面我们已经可以得到GBK汉字和BIG5的字节位置。那么就可以开始进行转换了。对于转换我原以为有一个特别的算法能够按照两种编码的不同简单地通过计算就可以得出结果来其实是不存在这种算法的。真正的做法是通过建立转换码表文件实现的。即对于GBK码表将原位置上的GBK汉字改成相应的BIG5汉字。对于BIG5码表将原位置上的BIG5汉字改成相应的GBK汉字。这样由于原来汉字的位置没有变但编码已经变成了想要转换的编码。通过计算出原汉字的位置将转换码表中对应汉字位置的字符取出来这样就完成了转换这就是为什么要进行编码定位的原因。的确程序是简单的但真正细致的工作是在建立转换码表上。我们需要从GBK转BIG5的码表文件和BIG5转GBK的码表文件。好在这一工作已经有人完成了在网上可以找到这种信息。本人就是在网上找到了这种对应的转换码表于是完成了一个用Python做的编码转换程序。想要此程序的可以点击此处下载pygb2big.zip
一个用于编码转换的Python模块的使用介绍程序文件名为pygb2big.py。命令行: python pygb2big.py [-u] [-b|-g] inputfile outputfile。
它主要的命令行参数为-b表示将GBK转化为BIG5-g表示将BIG5转成GBK-u显示程序的用法。inputfile为输入的待处理的文件而ouputfile为结果文件。它带有三个转换码表文件其中gbk2big.txt为GBK转big5对照表big2gbk.txt为BIG转GBKcf对照表。另一个为big2gbk-f.txt只是提供但并未使用它是将BIG5转换为繁体GBK码。
有了这个转换模块我们就可以应用于任何需要进行码制转换的地方了。当然这里只是GBK到BIG5的转换如果有其它的转换码表文件我们也可以实现其它的转换功能。 文章出自
http://www.chinaasp.com/20051123/python/index.shtml