使用标准库将表情符号解码为两个(或更多)代码点

2024-05-29 08:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够将表情符号解码为对应的代码点,如图here。我仅限于使用2.7中的标准库

例如: 🇲🇩 -&燃气轮机U+1F1F2U+1F1E9

我已经用这个代码获得了第一个代码点,但是我不知道如何提取第二个。有些表情符号甚至有更多的代码点

to_decode = u'🇲🇩'
code = ord(to_decode[0])
if 0xd800 <= code <= 0xdbff:
    code = (code - 0xd800) * 1024 + (ord(to_decode[1]) - 0xdc00) +  + 0x010000

print(hex(code))

Tags: to代码标准ifherecode解码print
3条回答

{a1}和{a2}的组合可以满足您的需求

>>> import struct
>>> b = to_decode.encode('utf_32_le')
>>> count = len(b) // 4
>>> count
2
>>> cp = struct.unpack('<%dI' % count, b)
>>> [hex(x) for x in cp]
['0x1f1f2', '0x1f1e9']

这是一种黑客行为,但您可以使用unicode字符串的repr

>>> repr(to_decode)
"u'\\U0001f1f2\\U0001f1e9'"

因此:

>>> hex(int(repr(to_decode)[4:12], 16))
'0x1f1f2'

>>> hex(int(repr(to_decode)[14:22], 16))
'0x1f1e9'

必须扩展此方法以支持具有两个以上代码点的emojis。您可以考虑使用上面的组合与{{CD2}}。

对于这个问题,实际上需要list(),它将Unicode字符分解为其组成代码点

to_decode = u'🇲🇩'
list(to_decode)
['🇲', '🇩']

作为一个例子,我创建了一个孟加拉字母表的unicode可视化

相关问题 更多 >

    热门问题