Python:从非BMP unicode字符中找到等效的代理对

发布于 2021-01-29 19:09:40

此处给出的答案是:如何在Python中使用代理对?告诉您如何将代理对'\ud83d\ude4f'转换为单个非BMP
unicode字符(答案为"\ud83d\ude4f".encode('utf-16', 'surrogatepass').decode('utf-16'))。我想知道如何反向执行此操作。如何使用Python从非BMP字符中找到等效的代理对,然后将'\U0001f64f'(🙏)转换回'\ud83d\ude4f'。我找不到明确的答案。

关注者
0
被浏览
38
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您必须使用代理对手动替换每个非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'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看