python - python如何将带有变体选择器的unicode转换为字符串并正确呈现
问题描述
在 Python3 中,有没有办法将“0x9f8d0xe0100”和“0x9f8d0xe0101”之类的 unicode 正确转换为字符串,以便我们可以看到这些变体选择器产生的差异?
基本表意文字 0x9f8d 在 CJK 中是“龙”。通过可视化,我的意思是在使用适当的字体时,在终端、文本文件等中实现最大的可移植性。
谢谢!
解决方案
这是一个非常奇怪的字符串格式,但如果这就是你所拥有的,你可以使用正则表达式来解析出这些值。如果代码之间没有分隔符,则表达式需要负前瞻来防止读取“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' 龍
推荐阅读
- python - Python/Dask 支持的分布式文件系统
- mruby - MRuby 中的非阻塞 $stdin.gets()(不是 MRI)
- c++ - c++ Linux中的线程无限期等待
- php - 三个表达式 Angular if 语句
- xamarin - 无法使用 Prism Navigation 在 TabbedPage 中打开特定页面
- vba - 未绑定主窗体上的列表框链接到绑定子窗体产生 3021(无当前记录)错误
- linux - 从用户空间终止一个 linux 内核线程
- c# - 动态更新标签
- pywin32 - pywin32 / pywinauto 最小化时无法在远程桌面中正常工作
- sas - 具有可选参数的 SAS 用户定义函数