在Python3中,有没有一种方法可以正确地将“ 0x9f8d0xe0100”和“ 0x9f8d0xe0101”之类的Unicode转换为字符串,以便我们可以直观地看到这些变体选择器产生的差异?
在CJK中,基本表意符号0x9f8d为“龙”。通过可视化,我的意思是当使用适当的字体时,可以在终端,文本文件等中实现最大的可移植性。
谢谢!
答案 0 :(得分:3)
这是一个非常奇怪的字符串格式,但是如果确实如此,则可以使用正则表达式来解析值。如果代码之间没有定界符,则该表达式需要否定前瞻以防止读取“ 9f8d0”而不是“ 9f8d”。
re.sub
可以使用替代功能。在这种情况下,使用基数16将正则表达式匹配的十六进制数字字符串转换为整数,然后将其转换为Unicode代码点。
import re
for text in ("0x9f8d0xe0100","0x9f8d0xe0101"):
result = re.sub(r'0x([0-9a-f]+)(?!x)',lambda m: chr(int(m.group(1),16)),text)
print(ascii(result),result)
输出:
'\u9f8d\U000e0100' 龍?
'\u9f8d\U000e0101' 龍?