Python:从非BMP unicode字符中找到等效的代理对
此处给出的答案是:如何在Python中使用代理对?告诉您如何将代理对'\ud83d\ude4f'
转换为单个非BMP
unicode字符(答案为"\ud83d\ude4f".encode('utf-16',
'surrogatepass').decode('utf-16')
)。我想知道如何反向执行此操作。如何使用Python从非BMP字符中找到等效的代理对,然后将'\U0001f64f'
(🙏)转换回'\ud83d\ude4f'
。我找不到明确的答案。
-
您必须使用代理对手动替换每个非BMP点。您可以使用正则表达式执行此操作:
import re _nonbmp = re.compile(r'[\U00010000-\U0010FFFF]') def _surrogatepair(match): char = match.group() assert ord(char) > 0xffff encoded = char.encode('utf-16-le') return ( chr(int.from_bytes(encoded[:2], 'little')) + chr(int.from_bytes(encoded[2:], 'little'))) def with_surrogates(text): return _nonbmp.sub(_surrogatepair, text)
演示:
>>> with_surrogates('\U0001f64f') '\ud83d\ude4f'