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

python how to convert unicodes with variation selectors into string and render it properly

在 Python3 中,有没有办法将“0x9f8d0xe0100”和“0x9f8d0xe0101”等 unicode 正确转换为字符串,以便我们可以直观地看到这些变体选择器所造成的差异?

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

谢谢!

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

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

re.sub可以取一个函数进行替换。在这种情况下,使用 base 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' 龍