首页 > 编程语言 >Python 汉字区位码、字符串 相互转换

Python 汉字区位码、字符串 相互转换

时间:2024-08-08 16:17:22浏览次数:7  
标签:位码 chinese Python 区位码 number 国标码 字符串

Python 汉字区位码、字符串 相互转换

区位码简介

GB2312所有字符放在一张94x94的矩阵中,矩阵中的每个位置对应一个字符(有的位置是空的,没有字符)。
区位码为十进制四位数,前后两位分别代表该字符在矩阵中的行、列坐标(均从1算起),如4528“图”字,为45行、28列上的字符。
能通过对区位码进行简单处理得到该字符对应的GB2312国标码,从而保存在计算机中。

区位码转为字符串步骤

步骤 示例
获取区码、位码 45, 28
1)区码、位码分别加上0xA0(16进制数) 45(0x2D) + 0xA0 = 0xCD
28(0x1C) + 0xA0 = 0xBC
2)区码、位码分别放入前后两个字节中,组成国标码(GB2312码)) b'\xCD\xBC'
3)对国标码进行解码 "图"

字符串转国标码步骤

与前者相反即可

转换代码



def c2n(chinese):  # 字符串(unicode)转区位码
    union_code = chinese.encode('gb2312')  # unicode转国标码
    b = int.from_bytes(union_code, byteorder='big') - 0xa0a0
    y, x = b // 0x100, b % 0x100  # 区码,位码
    return y * 100 + x  # 区位码


def n2c(number):  # 区位码转字符串(unicode)
    gb1 = number // 100 + 0xa0  # 区码+0xa0
    gb2 = number % 100 + 0xa0  # 位码+0xa0
    index = gb1 * 0x100 + gb2
    b = bytes.fromhex(hex(index)[2:])  # 国标码
    return b.decode('gb2312')  # 国标码转unicode


if __name__ == '__main__':
    # 测试用例
    test_samples = [
        ('图', 4528),
        ('万', 4582),
        ('具', 3063),
    ]

    for chinese_, number_ in test_samples:
        res = (c2n(chinese_), n2c(number_))
        print(f'标准:{chinese_}/{number_}, 测试结果:{res[0]}/{res[1]}')

标签:位码,chinese,Python,区位码,number,国标码,字符串
From: https://www.cnblogs.com/roundfish/p/18349155

相关文章

  • python3如何使用‘pexpect’自动与串口交互?
    如何在Windows中使用python'pexpect'自动与串口(例如:COM3)交互并在开机时通过串口登录嵌入式开发板时输入用户密码?ser=serial.Serial(port=serial_port,baudrate=baudrate,bytesize=bytesize,parity=parity,stopbits=stopbits,timeout=timeout)channel=pexpect.fdpexp......
  • Python 熊猫迭代
    代码:#Importcarsdataimportpandasaspdcars=pd.read_csv('cars.csv',index_col=0)#Adaptforloopforlab,rowincars.iterrows():print(f"{[lab]}:{row['cars_per_cap']}")输出:['US']:809['A......
  • 【第九节】python中xml解析和json编解码
    目录一、PythonXML解析1.1什么是XML1.2Python对XML的解析方法1.3SAX解析xml1.4xml.dom解析xml1.6ElementTree解析XML二、Python编解码json2.1什么是json2.2使用json库2.3使用第三方库Demjson一、PythonXML解析1.1什么是XML        XML,......
  • 从 python 设置运算符符号到方法名称的映射是什么?它们与文档不匹配
    我创建了自己的Customset类,它实现了python集合的几乎所有方法。当我使用此自定义集的实例时,许多集合运算符都会失败。它们会失败,并显示类似以下内容的内容:TypeError:unsupportedoperandtype(s)for-:'Customset'andCustomset'orTypeError:'<='......
  • 21.python函数(return)
    return一、return语句1、return是指定一个返回值2、在python中创建一个函数,可以用return语句指定返回的的值,这个返回值可以是任意的类型3、return语句在同一个函数中可以出现多次,但是只有有一个得到执行,就会直接结束函数的执行。return后面的语句不执行了4、return的格式re......
  • 【Python代码】如何根据出生日期计算出年龄?
    哈喽,大家好,木易巷来啦!假设我们有一个包含出生日期的Excel文件,需要计算每个人的年龄,你会怎么做呢?具体情况如下图:今天木易巷分享通过Python及其强大的pandas库,来实现从Excel文件中读取日期数据,计算年龄,并将结果存储回Excel文件中的过程。话不多说,开干!▍1、环境准备在开......
  • python 无法解密重音字符(如 è),我该怎么办?
    我正在解决这个ctf,您必须使用PyCryptodome模块通过DES加密消息。消息是“Launghezzadiquestafrasenonèdivisibileper8”(意大利语)。我无法将此消息转换为字节,因为重音字符不包含在utf-8中(我认为这就是解释)。有人可以帮我加密消息吗?fromCrypto.Util.Paddingimp......
  • Python笔记
    Python1变量1、什么是变量变量是关联一个对象的标识符变量可以绑定一个对象,并可以通过变量名使用这个对象2、变量的命名方法:以字母或下划线开头,后面跟字母、下划线或者数字3、python中的关键字不能用作变量名4、变量无类型,对象有类型5、在交互模式下查看当前作用域内的......
  • 如何在python中使用jdbc jar文件连接informix数据库
    有什么想法如何使用jdbcjar文件连接到informix数据库吗?在python我尝试了jaydebeapi,当我执行时:conn=jaydebeapi.connect('com.informix.jdbc.IfxDriver',myurl,['user','pass'],jdbc_driver_path)...然后从表中选择数据的其余代码当我执行myscript.py它只......
  • Python爬虫实战:实时微信推送奥运奖牌榜信息
    最近奥运会正在巴黎如火如荼地进行。为了能第一时间获得我国运动健儿的获奖情况,我给大家分享一个python爬虫项目——实时微信推送奥运奖牌榜信息。爬虫每隔5分钟抓取一次奥林匹克官网奖牌榜数据,对比上次抓取的数据,如果奖牌数量或者排名有变化,就将新的获奖信息推送到......