分享

随机生成GB2312汉字串

 新用户5228KeDY 2023-01-18 发布于北京

有时候需要一些测试数据,特别是需要公开的时候,比如有些学习材料里讲解怎样用Excel的姓氏笔画排序,一些随机没有意义的人名是很有用的。

这样我们就需要有一个能够随机生成汉字字符串的工具。最简单的汉字串是从GB2312里面获得。

这让我专门去看了一下GB2312编码。GB2312是国家标准局1980年制订、19815月执行的标准,在2017年的时候划为推荐标准,不再强制执行,该标准现编号为GB/T 2312-1980。在国家标准全文公开系统

https://openstd./bzgk/gb/newGbInfo?hcno=5664A728BD9D523DE3B99BC37AC7A2CC

可以查阅全文。

在其“4.图形字符”条目4.3.10处,介绍为“汉字6763个,分成两级。第一级汉字3755个,第二级汉字3008个”。一级汉字按拼音排列,二级汉字按部首排列。

一级汉字3755个从16区排到55区,二级汉字3008个从56区排到87区;每个区内排94个位,这就是区位码的由来。

例如第16区第1位,其第1字节给出了7位二进制码,首位被1,为10110000,十六进制为B0(十进制176);第2字节补1后为10100001,十六进制为A1(十进制161)。这样,这个位置“啊”字就被编码为二进制H(10110000)L(10100001),十六进制则为H(B0)L(A1),即高位和低位两个字节。(以往说一个汉字两个字节,就从这里来的,不过现在有了UTF8编码,可以变长,一个汉字,它可能是个少数民族字符,可能会3个或4个字节)

第一字节从16区至55区即B0F7连续,共72个区;第二字节从A1位至FE位连续,共94个位,其中55区即D7区尾部少5个,即D7FAD7FBD7FCD7FDD7FE不排,因此这些汉字一共72×945=6763。常用汉字6763个就这么来的。

现在可以生成随机汉字了。

创建一个函数,用Character_Count控制生成的汉字个数,用Common控制是否只从最最常用的3755个汉字中生成:

调用它,每次生成20个随机的人名儿:

实际还能做好些事情,例如生成一个特殊符号面板,随时复制等等。研究和学习了一个已经快要废弃的标准文件,原因有二:一是对一些不了解的原理的好奇,比如为什么用输入法打出来的数字序号,用括号包含的数字的序号能达到⑴……⒇、用小点儿后缀的数字的序号也能达到⒈……⒛共20个,而①……⑩、㈠……㈩等则只有10个;二是说明了随便找出来3个汉字,确实不能都当作人名,人起名确实有技术含量哈。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多