emoji:处理表情的第三方库

Python 有一个非常好玩的库叫 emoji,是专门用来处理表情相关的。我们知道 Unicode 字符最高可以占 4 字节,可以表示的字符范围非常大,因此它给每个 emoji 也分配一个 Unicode 码。

peach = ord("🍑")
print(peach)  # 127825
print(f"我要娶古明地觉,不好意思你在想 {chr(peach)} 吃")  # 我要娶古明地觉,不好意思你在想 🍑 吃

我们看到 🍑 对应的 Unicode 码是 127825,除此之外还有很多其它的,比如:

print(chr(127811))  # 🍃
print(chr(127812))  # 🍄
print(chr(127813))  # 🍅
print(chr(127814))  # 🍆
print(chr(127815))  # 🍇
print(chr(127865))  # 🍹

对于 emoji ,它们所分配的 Unicode 码会比较大,所以想显示一个 emoji 需要 4 个字节。而 Python 字符串采用的就是 Unicode,并且一个字符串里面所有的字符占的大小都是一样的,因此当一个字符是纯 ASCII 字符,那么每个字符占一字节。但如果你又往里面加了一个 emoji,那么整体会放大四倍,因为此时每个字符都会变成 4 字节大小。当然我们这里不是探讨字符串的原理,而是想说使用 chr 和 ord 也能操作 emoji,但是显然比较麻烦,最主要的是我们不可能把这些 emoji 的 Unicode 码给记下来。

因此 emoji 就出现了,那么它怎么用呢?

import emoji


s1 = emoji.emojize("我要娶古明地觉,不好意思你在想 :peach: 吃")
print(s1)  # 我要娶古明地觉,不好意思你在想 🍑 吃

s1 = emoji.emojize("我要娶古明地觉,不好意思你在想 :Peach: 吃")
print(s1)  # 我要娶古明地觉,不好意思你在想 :Peach: 吃

调用 emoji.emojize 会将字符串中冒号中的内容转成 emoji,如果找不到对应的 emoji 则按照原本输出,显然这样就比较方便了。

但是有的 emoji 比较特殊,我们需要指定 use_aliases=True 才可以实现:

import emoji


print(emoji.emojize(":dromedary_camel:"))  # :dromedary_camel:
print(emoji.emojize(":dromedary_camel:", use_aliases=True))  # 🐪

因此建议一律都带上 use_aliases=True 这个参数,除此之外我们看到 emoji 的周围用的是冒号,而我们也可以自己指定。

import emoji


print(emoji.emojize(":shit:", use_aliases=True))  # 💩
print(emoji.emojize("@@shit@@", use_aliases=True))  # @@shit@@
print(emoji.emojize("@@shit@@", use_aliases=True, delimiters=("@@", "@@")))  # 💩
# 通过 delimiters 指定 emoji 周围的符号,两侧可以不一样
print(emoji.emojize("@@shit__", use_aliases=True, delimiters=("@@", "@@")))  # @@shit__
print(emoji.emojize("@@shit__", use_aliases=True, delimiters=("@@", "__")))  # 💩

此外还有一个问题,就是有的 emoji 在输出的时候不带颜色:

import emoji


# 红心默认不带颜色,因此可以通过指定 variant="emoji_type" 参数
print(emoji.emojize(":heart:", use_aliases=True))  # ❤
print(emoji.emojize(":heart:", use_aliases=True, variant="emoji_type"))  # ❤️

整体来说还是比较简单的,我们可以通过英文字符的方式显示 emoji,但是我们还可以将这个过程返回来。因为有些数据库不支持存储 emoji,这个是我们需要使用 emoji.deemojize。

import emoji

print(emoji.demojize("你在想 🍑 吃"))  # 你在想 :peach: 吃

整体没什么难度,所有的 emoji 表情都支持,至于它们对应的英文可以去 https://www.webfx.com/tools/emoji-cheat-sheet/ 进行查看,当然像一些水果、植物、动物等等,它们的 emoji 就是对应的英文名。

import emoji


print(
    emoji.emojize(":tiger: :lemon: :watermelon: :pear: :bird:", use_aliases=True, variant="emoji_type")
)  # 🐯️ 🍋️ 🍉️ 🍐️ 🐦️
posted @ 2019-07-21 21:39  古明地盆  阅读(821)  评论(0编辑  收藏  举报