python如何将带有变体选择器的unicode转换为字符串并正确呈现

时间:2020-10-22 20:58:43

标签: python unicode

在Python3中,有没有一种方法可以正确地将“ 0x9f8d0xe0100”和“ 0x9f8d0xe0101”之类的Unicode转换为字符串,以便我们可以直观地看到这些变体选择器产生的差异?

在CJK中,基本表意符号0x9f8d为“龙”。通过可视化,我的意思是当使用适当的字体时,可以在终端,文本文件等中实现最大的可移植性。

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一个非常奇怪的字符串格式,但是如果确实如此,则可以使用正则表达式来解析值。如果代码之间没有定界符,则该表达式需要否定前瞻以防止读取“ 9f8d0”而不是“ 9f8d”。

  • 匹配“ 0x”
  • 匹配一个或多个十六进制数字。
  • 与“ x”之前的数字不匹配

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' 龍?