您必须使用代理对手动替换每个非BMP点。您可以使用正则表达式执行此操作:
import re_nonbmp = re.compile(r'[U00010000-U0010FFFF]')def _surrogatepair(match): char = match.group() assert ord(char) > 0xffff enpred = char.enpre('utf-16-le') return ( chr(int.from_bytes(enpred[:2], 'little')) + chr(int.from_bytes(enpred[2:], 'little')))def with_surrogates(text): return _nonbmp.sub(_surrogatepair, text)演示:
>>> with_surrogates('U0001f64f')'ud83dude4f'


