python 怎么过滤 emoji 表情符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 怎么过滤 emoji 表情符号相关的知识,希望对你有一定的参考价值。

参考技术A 解决方案对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFilter去过滤需要处理掉的字符串,代码如下InputFilteremojiFilter=newInputFilter()@OverridepublicCharSequencefilter(CharSequencesource,intstart,intend,Spanneddest,intdstart,intdend);随后我查阅了emoji的wikipedia与Github,从中提取出表情的一个大概unicode范围,由于Java可以直接对unicode进行匹配,这样我们可以很省事直接写出Pattern即可,代码如下InputFilteremojiFilter=newInputFilter()Patternemoji=Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE|Pattern.CASE_INSENSITIVE);@OverridepublicCharSequencefilter(CharSequencesource,intstart,intend,Spanneddest,intdstart,intdend)MatcheremojiMatcher=emoji.matcher(source);if(emojiMatcher.find())return"";returnnull;;基本上这样就能过滤掉emoji表情了

Python string中删除(过滤)掉emoji表情字符

最近做了一个需求,把公众号的用户信息同步到服务端,发现很多用户的昵称里面都有表情符号(emoji), 一般的处理方式是把MySQL的编码改成 utf8mb4,后来讨论了下,这些表情也没什么用,入库的时候直接删除就好了。

过滤方法

Python怎么过滤 emoji表情符号呢? 下面是剔除表情字符串的代码片段 python2.7 下测试

import re

emoji_pattern = re.compile(
    u"(\ud83d[\ude00-\ude4f])|"  # emoticons
    u"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)
    u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)
    u"(\ud83d[\ude80-\udeff])|"  # transport & map symbols
    u"(\ud83c[\udde0-\uddff])"  # flags (iOS)
    "+", flags=re.UNICODE)

def remove_emoji(text):
    return emoji_pattern.sub(r‘‘, text)

参考 removing-emojis-from-a-string-in-python , 如果正则没有写对 还可以遇到 sre_constants.error: bad character range 之类的错误 。

这里根据 unicode 范围来删除表情符号,通用的和IOS中的,应该不是很全,也没找到非常全的list。后面证实还是有写过滤不掉,最好还是把字段改成utf8mb4。。如果有更全的过滤方法,欢迎分享

修改字符编码

ALTER TABLE `table_name` MODIFY `nickname` VARCHAR(40) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

以上是关于python 怎么过滤 emoji 表情符号的主要内容,如果未能解决你的问题,请参考以下文章

Python string中删除(过滤)掉emoji表情字符

qq表情emoji怎么打出来?

Unity中,屏蔽输入的emoji符号

过滤emoji表情符

emoji表情符号复制后怎么用

安卓qq上怎么发iphone表情符号