如何获取常用汉字(GB2312)

听说常用汉字有3000多个,怎么获取呢?其实常用汉字已经有人替我们整理好了,就是字符集GB2312,是我国1980年发布的,共有6763个汉字,分为一级汉字和二级汉字,一级汉字采用拼音排序,二级汉字采用部首排序,一级汉字就是这里说的常用汉字。所以我们只要用一个合适的工具去获取它就行了。这里我们用Python。

废活少说,直接上代码:

import json # 导入json库用于把列表保存成.json格式

characters = [] # 创建一个列表用于保存汉字字符
for i in range(176, 216):
    s = bytes([i])
    for x in range(161, 255):
        s += bytes([x])
        try:
            c = s.decode("gb2312")
        except:
            break
        characters.append(c)
        print(c, end="\t") # 打印结果
        s = bytes([i])

print(len(characters)) # 打印结果数量

filename = "common_chinese_characters.json"
with open(filename, "w", encoding="utf-8") as f:
    json.dump(characters, f, ensure_ascii=False)

说明:bytes.decode(编码类型)用于解码,把字节类型转换为字符类型,编码类型为指定的字符集;str.encode(编码类型)用于编码,把字符类型转换为字节类型,编码类型为指定的字符集。二者互为反向操作。
举个例子:

>>> c = 'Python大法好'.encode('utf-8') # utf-8也是一种字符集,几乎支持世界上的所有语言。
>>> s = c.decode('gb2312') # 这样会出问题,要么出错要么乱码。因为utf-8和gb2312的定义不同。
>>> s = c.decode('utf-8') # 这样就没问题了。
>>> print(s) # 可以看到输出结果是 "Python大法好",和之前定义的一样。

这里有必要讲一下GB2312的定义:GB2312定义的字符由两位字节构成,高位字节和低位字节。一级汉字的编码范围是0xb0a1~0xd7f9(16进制)或者45217~55289(10进制)。可以百度自己研究,此处不多说。

代码原理很简单,就是利用for循环去遍历GB2312字符集定义的一级汉字。其中第一个for循环用于遍历高位字节,第二个嵌套在第一个for循环里的for循环用于遍历低位字节。变量s用于存储字符类型的汉字编码成字节类型,变量c即为转换成字符类型的汉字。try...except...结构用于防止最后几位汉字出错,因为最后一个汉字的字节类型表示是b'\xd7\xf9',所以会出错,而一旦出错就意味着已经结束了。

bytes([i])[i]并不是表示列表索引。整个语句的意思是把整数类型变量i替换成字节类型的十六进制形式并保存到变量s。可以自己在交互环境中试一试。

open()中的encoding用于指定保存的编码,ensure_ascii=False是必须的,用于指定要保存成字符类型,因为中文不在ascii编码中,如果没有这句话,输出的json文件看起来会是这样:
["\u554a", "\u963f", "\u57c3", "\u6328", "\u54ce",

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值