Python随机生成中文字符的方法

第一种方法:Unicode码

在unicode码中,汉字的范围是(0x4E00, 9FBF)

import random

def Unicode():
	 val = random.randint(0x4e00, 0x9fbf)
	 return chr(val)
  • 1
  • 2
  • 3
  • 4
  • 5

这个方法比较简单,但是有个小问题,unicode码中收录了2万多个汉字,包含很多生僻的繁体字。

第二种方法:GBK2312

gbk2312对字符的编码采用两个字节相组合,第一个字节的范围是0xB0-0xF7, 第二个字节的范围是0xA1-0xFE.
更新:
值得注意的是,对于第55区,D7FA-D7FE的5个是没有编码的,需要在两个字节组合的范围中特意剔除一下。

对GBK2312编码方式详细的解释请参看GBK2312编码(参考文献3)(参考文献4)。

import random

def GBK2312():
	 head = random.randint(0xb0, 0xf7)
	 body = random.randint(0xa1, 0xfe)
	 val = f'{head:x}{body:x}'
	 str = bytes.fromhex(val).decode('gb2312')
	 return str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

GBK2312收录了6千多常用汉字.两种方法的取舍就看需求了。

pyhon encode和decode函数

Python2.x中默认的编码的基础类型是unicode编码的类型,在Python3.x才转化为基于unicode的字符串。
那么我们在Python2.x的学习中就会遇到各种各样的编码问题,encode和decode函数就是很好的帮我们解决这样问题的工具。
下面的程序中有详细的介绍和例子!
在Python2.x中:

u = u'中文' #显示指定unicode类型对象u 
str = u.encode('gb2312') #以gb2312编码对unicode对像进行编码 
str1 = u.encode('gbk') #以gbk编码对unicode对像进行编码 
str2 = u.encode('utf-8') #以utf-8编码对unicode对像进行编码 
u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码,以获取unicode 
u2 = str.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的unicode类型 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在Python3.x中:

u = '中文' #指定字符串类型对象u 
str = u.encode('gb2312') #以gb2312编码对u进行编码,获得bytes类型对象str 
u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码,获得字符串类型对象u1 
u2 = str.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容 
  • 1
  • 2
  • 3
  • 4

但是我们在读取、写入文件的时候就要注意以文件的格式来判断用什么方式来操作了,txt文件默认都是utf-8当然你也可以自己设定编码格式。
我们在对txt文件进行操作时,最好都将编码格式转化为utf-8来方便操作吧!

参考文献:
1、https://www.jb51.net/article/128987.htm 2018.7.20
2、好玩的Python吃鸡也要效率高:利用gb2312汉字区位码 - 简书 2018.7.20
3、GB2312 编码范围, GB2312 编码表 2018.7.20
4、GB2312简体中文编码表(转)_dragoo1的专栏-CSDN博客_gb2312编码表 2018.9.18

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值