Python 3中获取Emoji的UTF-8字节及反向显示实现方法
Python 3 中 emoji 与 UTF-8 字节的互转方法
获取 emoji 对应的 UTF-8 字节
Python 3 里的字符串默认是 Unicode 类型,要得到 emoji 的 UTF-8 字节表示,需要显式将字符串编码为 bytes 对象:
>>> emoji = '😋' # 编码为 UTF-8 字节 >>> utf8_bytes = emoji.encode('utf-8') >>> utf8_bytes b'\xf0\x9f\x98\x8b'
如果需要得到类似 Python 2 中那种带 \x 前缀的字符串形式,可以通过遍历字节拼接实现:
>>> ''.join(f'\\x{byte:02x}' for byte in utf8_bytes) '\\xf0\\x9f\\x98\\x8b'
从 UTF-8 字节还原 emoji
反过来,要从 UTF-8 字节序列得到对应的 emoji,只需将 bytes 对象解码为 Unicode 字符串即可:
方法1:直接使用 bytes 字面量解码
>>> b'\xf0\x9f\x98\x8b'.decode('utf-8') '😋' >>> print(b'\xf0\x9f\x98\x8b'.decode('utf-8')) 😋
方法2:从带 \x 的字符串还原
如果手里是类似 '\xf0\x9f\x98\x8b' 的字符串,需要先将其转换为 bytes 对象再解码:
>>> import codecs >>> hex_str = '\\xf0\\x9f\\x98\\x8b' # 转义字符串转为 bytes >>> decoded_bytes, _ = codecs.escape_decode(hex_str) # 解码为 emoji >>> decoded_bytes.decode('utf-8') '😋'
与 Python 2 的差异说明
Python 2 中默认字符串类型是字节序列(bytes),所以直接输入 emoji 字符串时,解释器会显示其 UTF-8 字节的转义形式;而 Python 3 明确区分了 Unicode 字符串和字节序列,必须通过显式的 encode()/decode() 操作来完成两者的转换。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

