如何在Python中实现代理对与十六进制的相互转换?
处理多码点字符的十六进制与双向转换问题
像👩🏻这类带修饰的表情符号,本质是多个Unicode码点的组合序列(比如👩🏻由基础人物码点U+1F469和肤色修饰符码点U+1F3FB组成),而ord()函数只能接收长度为1的单个码点字符,直接传入多码点字符串就会触发TypeError。
以下是针对单/多码点字符通用的双向转换方案:
1. 字符转十六进制
遍历字符串中的每个字符,分别获取其码点的十六进制表示,再组合起来:
# 多码点字符转十六进制列表 target_char = "👩🏻" hex_codes = [hex(ord(c)) for c in target_char] print(hex_codes) # 输出: ['0x1f469', '0x1f3fb'] # 或者转为空格分隔的十六进制字符串 hex_str = ' '.join(hex_codes) print(hex_str) # 输出: '0x1f469 0x1f3fb'
2. 十六进制转回字符
将十六进制字符串按空格拆分,每个十六进制值转为整数后生成对应字符,最后拼接成完整字符串:
# 十六进制字符串转回字符 hex_str = '0x1f469 0x1f3fb' result_char = ''.join([chr(int(hx, 16)) for hx in hex_str.split()]) print(result_char) # 输出: '👩🏻'
封装通用函数
如果需要频繁处理,可以封装成通用函数,同时兼容单码点和多码点字符:
def char_to_hex(char: str) -> str: """将任意字符(单/多码点)转为空格分隔的十六进制字符串""" return ' '.join([hex(ord(c)) for c in char]) def hex_to_char(hex_str: str) -> str: """将空格分隔的十六进制字符串转回对应字符""" return ''.join([chr(int(hx, 16)) for hx in hex_str.split()]) # 测试单码点表情 print(char_to_hex("😀")) # 输出: '0x1f600' print(hex_to_char('0x1f600')) # 输出: '😀' # 测试多码点表情 print(char_to_hex("👩🏻")) # 输出: '0x1f469 0x1f3fb' print(hex_to_char('0x1f469 0x1f3fb')) # 输出: '👩🏻'
内容的提问来源于stack exchange,提问作者radiantsoup0827
相关产品推荐
相关产品推荐

