首页 > 解决方案 > python如何将带有变体选择器的unicode转换为字符串并正确呈现

问题描述

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

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

谢谢!

标签: pythonunicode

解决方案


这是一个非常奇怪的字符串格式,但如果这就是你所拥有的,你可以使用正则表达式来解析出这些值。如果代码之间没有分隔符,则表达式需要负前瞻来防止读取“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' 龍

推荐阅读