如图,“广”的编码为%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个汉字的规律,先定位节编码,利用汉字在某一节的位置定位字符编码

实施:

第一步:提取汉字

with open('E:/GBK.txt') as f:

s=f.read().splitlines().split()

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

把获取到的字符解码看:

删除掉这些字符:

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

gbk.remove(u'\uff10')

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

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']:

gbk.remove(t)

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

生成编码系列:

行编码为0-9 A-F,列编码为A-F

从A1开始递增,遇到边界(A9-AA)要手动处理,用到了ord()和chr()函数,在ASCII编码和数字之间转换。

t=['A1']

while True:

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

break

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

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

continue

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

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

continue

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

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

continue

得到的列表:

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

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

gbk.remove(u'\u3000')

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

我把这个字典文件放到网盘上了,外链:http://dl.dbank.com/c0m9selr6h

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

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

附上python代码和注释:

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

#gbkFile字典文件 共3755个汉字

#s为要转换的汉字,暂且为gb2312编码,即从IDLE输入的汉字编码

#读入字典

with open(gbkFile) as f:

gbk=f.read().split()

#生成A1-FE的索引编码

t=['A1']

while True:

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

break

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

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

continue

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

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

continue

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

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

continue

#依次索引每个汉字

l=list()

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

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

i=gbk.index(st)+1

#小节编码从B0开始,获取汉字的小节编码

t1='%'+t[t.index('B0'):][i/94]

#汉字在节点中的索引号

i=i-(i/94)*94

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

l.append(t1+t2)

#最后用空格分隔输出

return ' '.join(l)

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

附上我的微博ID:小栾Cooper

python输入汉字的代码_基于python的汉字转GBK码实现代码相关推荐

  1. 基于python爬虫技术的应用_基于Python爬虫技术的应用

    办公自动化杂志 一.引言 本文主要是对 Python 爬虫技术进行阐述,基于 python 的爬虫与其他语言相比的有很多优势.通过爬去某个网站的所有新闻这个案例,来进一步阐释 Python 爬虫技术的 ...

  2. python点名代码_基于python tkinter的点名小程序功能的实例代码

    基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...

  3. python的坐标代码_基于Python的地图坐标服务接口调用代码实例

    代码描述:基于Python的地图坐标服务接口调用代码实例 关联数据:地图坐标服务 接口地址:http://www.juhe.cn/docs/api/id/32 #!/usr/bin/python # ...

  4. 基于python的音频播放器_基于python实现音乐播放器代码实例

    基于python实现音乐播放器代码实例,一首,函数,按钮,布局,音乐 基于python实现音乐播放器代码实例 易采站长站,站长之家为您整理了基于python实现音乐播放器代码实例的相关内容. 核心播放 ...

  5. 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中

    搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...

  6. python三维重建代码_基于Python的三维重建开源代码

    [实例简介] 基于Python的三维重建开源代码,包括特征提取,SFM,PMVS以及CMVS等相关功能! [实例截图] [核心代码] sfm-bundler(python) └── sfm-bundl ...

  7. python名片打印程序代码_基于Python的名片识别接口调用代码实例

    #!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib import urlencode #-------- ...

  8. python房子代码_基于python的链家小区房价爬取——仅需60行代码!

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

  9. python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

最新文章

  1. (C++)1025 PAT Ranking
  2. Java 内部类及其原理
  3. android 多个应用,Android中一个应用实现多个图标的几种方式
  4. ZOJ 1696 Viva Confetti 计算几何
  5. 生物信息学(Bioinformatics)
  6. python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...
  7. 新买的锅要怎么处理?-新锅开锅处理
  8. codeforces 297 E. Anya and Cubes
  9. SSIS - 7.发邮件任务
  10. c++容器vector介绍
  11. 项目管理与项目组合管理的不同
  12. Python中,os.listdir遍历纯数字文件乱序如何解决
  13. 通俗易懂的Monte Carlo积分方法(二)
  14. MATLAB常用三角函数
  15. 【译】ObjectBox官方文档(4)——关系
  16. NISP第一讲信息安全和网络空间安全
  17. 木门锁孔合页综合加工机器
  18. Energy-aware scheduling(Linux Kernel Summit 2013 )(待续)
  19. c语言弹出文本框,微信小程序弹出文本输入框
  20. 欧拉函数φ(x)简要介绍及c++实现

热门文章

  1. 蓝桥杯单片机第三届省赛题详细讲解(自动售水机)
  2. 解决 应用程序无法正常启动0xc0150002
  3. haproxy配置文件的语法检查
  4. 对自己的window7提权
  5. element.style样式错误问题
  6. 西北乱跑娃 --- bottle微框架从注册到应用(六)
  7. 【JS逆向系列】某空气质量监测平台无限 debugger 与 python算法还原
  8. 移动硬盘提示由于IO设备错误,无法运行此项请求数据怎么寻回
  9. 房屋租赁网站的设计与实现(一)
  10. hosts文件修改,重启生效