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



在Python3中,有没有一种方法可以正确地转换unicode,比如"0x9f8d0xe0100";以及";0x9f8d0xe0101";转换成字符串,以便我们可以可视化这些变体选择器所产生的差异?

基本表意文字0x9f8d是'龍'CJK。我所说的可视化是指当使用正确的字体时,最大限度地提高可移植性,比如在终端、文本文件等中。

谢谢!

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

输出:

'u9f8dU000e0100' 龍󠄀
'u9f8dU000e0101' 龍󠄁

最新更新