使用python表情包无法正确显示表情

时间:2020-10-04 10:43:44

标签: python unicode emoji

我编写了一个脚本,可以从给定的数据集中提取所有表情符号:

for message in df['Message']:
     for char in message:
         if char in emoji.UNICODE_EMOJI:
              print(char)

它可以工作并正确识别哪些字符是表情符号。但是,输出无法正确解析某些表情符号,它们只是显示为棕色正方形:

?

为什么会这样?有什么办法解决这个问题吗?大多数表情符号显示都很好,但有一些表情符号不会显示。

编辑: 再次查看之后,棕色方块似乎带有一些表情符号来说明所用的色调。

但是,某些表情符号仍然存在一些问题。例如,通常的心脏表情符号确实显示为心脏字符,但不是以表情符号样式显示。屏幕快照,因为将其粘贴到此处最终可以正确显示它:enter image description here

1 个答案:

答案 0 :(得分:2)

问题是深色肤色(通常是色变)通常被编码为两个单独的符号,而不是一个,即 ??来自两个符号? ?的结果(第二个给出颜色)。

您可以从以下示例中看到它:

df = pd.DataFrame({"Message": ["test ?? "]})
for message in df['Message']:
    for char in message:
        if char in emoji.UNICODE_EMOJI:
            print(char)
?
?

因此,您将必须使用正则表达式(as per this answer):

import regex
df = pd.DataFrame({"Message": ["test ?? ", "test 2 ? ?"]})

def split_count(text):

    emoji_list = []
    data = regex.findall(r'\X', text)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI for char in word):
            emoji_list.append(word)

    return emoji_list

for message in df['Message']:
    counter = split_count(message)
    print(' '.join(emoji for emoji in counter))

输出:

??
? ?