基于python的汉字转GBK码 - L Cooper - 博客园

说明:

今天想用python调用百度框计算的搜过结果,看到了URL里面的汉字用GBK编码,虽然可以直接在URL里面加入中文,之前也做过一个简体字转GBK码的python函数,但还是略嫌麻烦,今天改了一下。
基于python的汉字转GBK码
    

基于python的汉字转GBK码

如图,“广”的编码为%B9%E3,暂且把%B9称为节编码,%E3为字符编码(第二编码)。

思路:
从GBK编码页面收集汉字 http://ff.163.com/newflyff/gbk-list/
从实用角度下手,只选取“● GBK/2: GB2312 汉字”这一节,共3755个汉字。
看规律:小节编码从B0-D7,而针对汉字的编码从A1-FE,即16*6-2=94,非常有规律性。
第一步:把常用的汉字用python提取出来,按顺序存到一个字典文件里面,汉字用空格分隔。
第二步:根据编码从A1-FE,每节94个汉字的规律,先定位节编码,利用汉字在某一节的位置定位字符编码

实施:
第一步:提取汉字

View Code

1 with open('E:/GBK.txt') as f:
2     s=f.read().splitlines().split()

分割得到的list里面有重复的节编码,要去掉B0/B1……类似的符号和中文的0-9/A-F字符
把获取到的字符解码看:

基于python的汉字转GBK码
    

基于python的汉字转GBK码

基于python的汉字转GBK码
    

基于python的汉字转GBK码
删除掉这些字符:
先把分割得到的list全部解码,然后

View Code

')

这里删除字符的时候,用range生成一系列字符串,然后用notepad++处理了一下,并没有找到简单的办法

View Code

']: 2 gbk.remove(t)

然后去除B0-D7这样的小节编码,同时提取字符编码的时候也要用到类似的A1-FE这样的编码,于是就想生成这样一个list,方便做删除和索引操作。

生成编码系列:
行编码为0-9 A-F,列编码为A-F
从A1开始递增,遇到边界(A9-AA)要手动处理,用到了ord()和chr()函数,在ASCII编码和数字之间转换。

 1 t=['A1']
 2 while True:
 3     if t[-1]=='FE':
 4         break
 5     if (ord(t[-1][1])>=48 and ord(t[-1][1])<57) or (ord(t[-1][1])>=65 and ord(t[-1][1])<70):
 6         t.append(t[-1][0]+chr(ord(t[-1][1])+1))
 7         continue
 8     if ord(t[-1][1])>=57 and ord(t[-1][1])<65:
 9         t.append(t[-1][0]+chr(65))
10         continue
11     if ord(t[-1][1])>=70:
12         t.append(chr(ord(t[-1][0])+1)+chr(48))
13         continue

得到的列表:

说明:

今天想用python调用百度框计算的搜过结果,看到了URL里面的汉字用GBK编码,虽然可以直接在URL里面加入中文,之前也做过一个简体字转GBK码的python函数,但还是略嫌麻烦,今天改了一下。
基于python的汉字转GBK码
    

基于python的汉字转GBK码

如图,“广”的编码为%B9%E3,暂且把%B9称为节编码,%E3为字符编码(第二编码)。

思路:
从GBK编码页面收集汉字 http://ff.163.com/newflyff/gbk-list/
从实用角度下手,只选取“● GBK/2: GB2312 汉字”这一节,共3755个汉字。
看规律:小节编码从B0-D7,而针对汉字的编码从A1-FE,即16*6-2=94,非常有规律性。
第一步:把常用的汉字用python提取出来,按顺序存到一个字典文件里面,汉字用空格分隔。
第二步:根据编码从A1-FE,每节94个汉字的规律,先定位节编码,利用汉字在某一节的位置定位字符编码

实施:
第一步:提取汉字

View Code

1 with open('E:/GBK.txt') as f:
2     s=f.read().splitlines().split()

分割得到的list里面有重复的节编码,要去掉B0/B1……类似的符号和中文的0-9/A-F字符
把获取到的字符解码看:

基于python的汉字转GBK码
    

基于python的汉字转GBK码

基于python的汉字转GBK码
    

基于python的汉字转GBK码
删除掉这些字符:
先把分割得到的list全部解码,然后

View Code

')

这里删除字符的时候,用range生成一系列字符串,然后用notepad++处理了一下,并没有找到简单的办法

View Code

']: 2 gbk.remove(t)

然后去除B0-D7这样的小节编码,同时提取字符编码的时候也要用到类似的A1-FE这样的编码,于是就想生成这样一个list,方便做删除和索引操作。

生成编码系列:
行编码为0-9 A-F,列编码为A-F
从A1开始递增,遇到边界(A9-AA)要手动处理,用到了ord()和chr()函数,在ASCII编码和数字之间转换。

 1 t=['A1']
 2 while True:
 3     if t[-1]=='FE':
 4         break
 5     if (ord(t[-1][1])>=48 and ord(t[-1][1])<57) or (ord(t[-1][1])>=65 and ord(t[-1][1])<70):
 6         t.append(t[-1][0]+chr(ord(t[-1][1])+1))
 7         continue
 8     if ord(t[-1][1])>=57 and ord(t[-1][1])<65:
 9         t.append(t[-1][0]+chr(65))
10         continue
11     if ord(t[-1][1])>=70:
12         t.append(chr(ord(t[-1][0])+1)+chr(48))
13         continue

得到的列表:

相关文章:

  • 2022-02-08
  • 2022-12-23
  • 2021-08-17
  • 2022-12-23
  • 2021-07-27
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2021-12-16
  • 2022-02-08
  • 2021-11-27
  • 2021-11-30
相关资源
相似解决方案