如何进行Python编码转换?

开发 后端
真正的做法是通过建立Python编码转换文件实现的。即对于GBK码表,将原位置上的GBK汉字改成相应的BIG5汉字,下面进行详细说明。

下面文章主要将使用Python编码转换的程序向大家进行说明,如果对代码有什么不了解,建议大家还是去网上或者相关论坛去寻找,大多数Python编码是大陆使用的编码集。

以前使用的为GB-2312编程,它只有常用字,字数有限。后国家制定了新的GBK编码,汉字已经达到了2万多。GBK完全兼容原GB-2312编码,也就是说一个GB2312的编码在GBK上是一模一样的。这里所介绍的转换是以GBK为基础的,因此适用性很广。

GBK编码中不仅包括了原GB-2312编码,同时也包括了许多简码的繁体码,同时还有许多的符号与不常用汉字。GBK编码的范围是:高字节从0x81到0xFE,低字节从0x40到0xFE,同时不包括0x7F。这样如果我们将其排成一个矩形,看上去就少了xx7F一根线。

那么如何定位一个GBK码呢?当我们拿到一个编码时,如何判断是不是一个GBK码,如果是GBK码如何定位它的位置呢?判断一个GBK码应该比较简单,我们只要根据它的有效范围进行判定即可。

这里ch1和ch2分别是一个字符的高字节和低字节。如何定位(为什么要定位我们在后面讲)?首先介绍一下码表。码表是所有编码放在一起形成的,你可以将其放在文件中(这里讲述的是将编码放在文件中)。

我们在存放编码时是将有实际意义的编码放在了一起(因为有一些组合是不存在的),而且是按字节大小的顺序放的。根据GBK的编码范围,我们可以设想一个二维坐标,纵坐标是高字节,横坐标是低字节,每一个交叉点上是一个汉字,占两个字节。

这样一行上的汉字个数应该为0xFE-0x40+1-1=190(加1是因为要把0x40也算进去。减1是因为要把7F去掉)。定位时,我们先用高字节减去0x81,得到纵坐标偏移量。用低字节减去0x40得到横坐标偏移量。用纵坐标偏移量乘以每个汉字个数,加上横坐标偏移量就得到汉字的偏移量。再乘以2得到字节的偏移量。那么定位算法为:

index=((ch1-0x81)*190+(ch2-0x40)-(ch2/128))*2上面的算法中有-(ch2/128)。这是因为GBK中没有7F码,因此当ch2小于7F时,ch2/128=0,则表示7F没有计算在内。而当ch2大于7F时。

ch2/128=1,则表示多算了7F一值,因此要去掉。由于一个汉字有两个字节,故要乘以2。这样我们就得到一个GBK汉字在码表中的字节位置了。BIG5是香港和台湾地区使用的编码集。它的范围为:高字节从0xA0到0xFE,低字节从0x40到0x7E,和0xA1到0xFE两部分。

判断一个汉字是否是BIG5编码,可以如上对字符的编码范围判断即可。如何定位呢?Python编码转换那么也想象所有编码排列为一个二维坐标,纵坐标是高字节,横坐标是低字节。这样一行上的汉字个数:(0x7E-0x40+1)+(0xFE-0xA1+1)=157。那么定位算法分两块。#t#

上面,我们已经可以得到GBK汉字和BIG5的字节位置。那么就可以开始进行转换了。对于转换我原以为有一个特别的算法,能够按照两种编码的不同,简单地通过计算就可以得出结果来,其实是不存在这种算法的。

真正的做法是通过建立转换码表文件实现的。即对于GBK码表,将原位置上的GBK汉字改成相应的BIG5汉字。对于BIG5码表,将原位置上的BIG5汉字改成相应的GBK汉字。这样,由于原来汉字的位置没有变。

但编码已经变成了想要转换的编码。通过计算出原汉字的位置,将转换码表中对应汉字位置的字符取出来,这样就完成了转换(这就是为什么要进行编码定位的原因)。的确,程序是简单的。

但真正细致的工作是在建立转换码表上。我们需要从GBK转BIG5的码表文件,和BIG5转GBK的码表文件。好在这一工作已经有人完成了,在网上可以找到这种信息。本人就是在网上找到了这种对应的转换码表,于是完成了一个用Python编码转换程序。

责任编辑:chenqingxiang 来源: 新浪科技
相关推荐

2010-03-11 17:38:20

Python中文

2023-02-20 15:35:15

ChatGPT编码面试

2010-02-22 16:05:40

Python配置

2024-07-08 08:38:37

Python游戏开发

2010-02-03 13:55:51

Python 代码

2010-02-01 14:48:43

2010-02-01 17:33:24

Python主线程

2010-03-15 15:11:50

Python列表

2010-02-01 18:20:17

Python 多重继承

2010-02-02 16:47:12

Python主线程

2010-03-01 16:32:36

Python语言

2010-02-22 17:12:34

Python对象

2010-03-09 18:14:55

Python sock

2010-03-15 15:45:15

Python编程语言

2010-02-01 16:22:36

Python字符串操作

2010-03-01 11:06:52

Python 调试器

2009-12-24 10:12:02

Linux查看文件编码

2023-09-15 07:16:04

Kurukshetr组件PHP编写

2010-03-12 19:29:15

python svn脚

2010-03-12 17:35:00

Python字符串
点赞
收藏

51CTO技术栈公众号