说明:

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

如图,“广”的编码为%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字符

把获取到的字符解码看:

删除掉这些字符:

先把分割得到的list全部解码,然后

View Code

1 gbk.remove(u'\uff10')

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

View Code

1 for t in [u'\uff10',u'\uff11',u'\uff12',u'\uff13',u'\uff14',u'\uff15',u'\uff16',u'\uff17',u'\uff18',u'\uff19',u'\uff21',u'\uff22',u'\uff23',u'\uff24',u'\uff25',u'\uff26']:

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

得到的列表:

有了这个编码序列后,就可以从gbk库中删除B0-D7字符了。

最后检查到还有空格未删除,空格的unicode码是\u3000

gbk.remove(u'\u3000')

最后encode成UTF-8编码保存到字典文件。

第二步:索引汉字

索引就是个简单算法,因为字典里面的汉子是按照原先顺序存储的,而且GBK编码表2的3755个汉字严格遵守每节94个汉字的规律,那就来个简单的除数取整+1来定位小节编码,再用汉字索引-节索引*94得到汉字在这一小节中的索引,然后利用上面生成的A1-FE list和索引来定位第二编码。

算法思路有了,编码,然后调试

附上python代码和注释:

1 def getGBKCode(gbkFile='E:/GBK1.1.txt',s=''):

2 #gbkFile字典文件 共3755个汉字3 #s为要转换的汉字,暂且为gb2312编码,即从IDLE输入的汉字编码4

5 #读入字典6 with open(gbkFile) as f:

7 gbk=f.read().split()

8

9 #生成A1-FE的索引编码10 t=['A1']

11 while True:

12 if t[-1]=='FE':

13 break

14 if (ord(t[-1][1])>=48 and ord(t[-1][1])<57) or (ord(t[-1][1])>=65 and ord(t[-1][1])<70):

15 t.append(t[-1][0]+chr(ord(t[-1][1])+1))

16 continue

17 if ord(t[-1][1])>=57 and ord(t[-1][1])<65:

18 t.append(t[-1][0]+chr(65))

19 continue

20 if ord(t[-1][1])>=70:

21 t.append(chr(ord(t[-1][0])+1)+chr(48))

22 continue

23 #依次索引每个汉字24 l=list()

25 for st in s.decode('gb2312'):

26 st=st.encode('utf-8')

27 i=gbk.index(st)+1

28 #小节编码从B0开始,获取汉字的小节编码29 t1='%'+t[t.index('B0'):][i/94]

30 #汉字在节点中的索引号31 i=i-(i/94)*94

32 t2='%'+t[i-1]

33 l.append(t1+t2)

34 #最后用空格分隔输出35 return ' '.join(l)

得承认我的python代码不是那么工整

附上我的微博ID:小栾Cooper

完毕,欢迎吐槽

gbk编码python_基于python的汉字转GBK码相关推荐

  1. 基于python的汉字转GBK码

    基于python的汉字转GBK码 - L Cooper - 博客园 基于python的汉字转GBK码 说明: 今天想用python调用百度框计算的搜过结果,看到了URL里面的汉字用GBK编码,虽然可以 ...

  2. python用gbk编码自己的名字_基于python的汉字转GBK码

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

  3. python输入汉字的代码_基于python的汉字转GBK码实现代码

    如图,"广"的编码为%B9%E3,暂且把%B9称为节编码,%E3为字符编码(第二编码). 思路: 从GBK编码页面收集汉字 http://ff.163.com/newflyff/g ...

  4. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...

  5. 匿名函数python_基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  6. log python_基于Python log 的正确打开方式

    保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import sm ...

  7. 列表解析python_基于Python列表解析(列表推导式)

    列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...

  8. 名片识别信息分类python_基于Python的智能名片识别接口调用代码实例

    基于Python的智能名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib im ...

  9. 快速傅里叶变换python_基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法. ...

最新文章

  1. 还不懂Docker?一个故事安排的明明白白!
  2. IDEA 2019.2版本下载安装与PJ教程
  3. 嗯?time命令Linux time // 对比印象中的time()函数
  4. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
  5. 通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记
  6. pthread_t描述说明
  7. .NET 指南:许可请求
  8. 检查可执行文件所需要的共享库
  9. 她只用1个方法,就把英语拿下了!
  10. 1.4-1.5 HBase部署及基本使用
  11. 安装oracle 10g闪退,Windows 7安装Oracle 10g常见错误及解决方法
  12. QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹
  13. SegNet网络结构
  14. 乐山市计算机学校欺骗,据说这个学校很乱。
  15. 广度优先搜索 解决九宫格问题
  16. mysql delete数据怎么恢复_mysql数据delete后的数据恢复
  17. 领域驱动设计思维导图
  18. 苹果开发者账号添加设备
  19. 用python解矩阵方程_用Python的Numpy求解线性方程组
  20. 【简单应用】STC8+OLED(4P)显示

热门文章

  1. 认识自我,提高原动力
  2. strlen函数、length函数、size函数的区别
  3. python爬取豆瓣读书简单_Python用16行代码就搞定了爬取豆瓣读书页面
  4. Flutter 系统弹框
  5. JQuary页面元素综合操作案例
  6. build iPhone toolchain for 3.0 in windows via CYGWIN
  7. java爬虫httpclient循环重定向的处理
  8. 获取美元人民币以及USDT人民币汇率-Python版
  9. 使用CGLib实现动态代理
  10. 在担任CEO的8年多时间里,只有3天是顺境,剩下的8年几乎全是举步维艰