最近在作业时爬取github项目的概述时,发现有特殊字符
诸如这种:
由于需要向数据库存入,所以有两种解方案:
1、过滤此字符串中的emoji
2、使mysql数据库兼容emoji表情存储
此时我选择第二种:
具体步骤:
找到mysql的配置文件,示例为windows:
在该文件末尾添加如下代码:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
重启mysql服务
随后修改表结构,代码如下:
ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE `表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意分号
成功存入数据库后,在将数据库数据在前段展示时:
发现部分emoji在浏览器显示为’?’
其原样式:
百度的显示emoji方法以及原网页显示方法都为添加一个图片链接,因为嫌麻烦,而且其本身无太大作用,我想起来了方法1,搜到的有效方法,Python代码如下:
str ='🏡 Open source home automation that puts local control and privacy first'
def filter_emoji(desstr, restr=''):
# 过滤表情
try:
res = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
res = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
return res.sub(restr, desstr)
resultStr = filter_emoji(str)
print(resultStr)
测试发现其只能过滤部分emoji表情,但是在多次测试后发现,过滤的emoji字符刚好全为在浏览器不能正常显示的emoji字符。
完美解决!!
但是对原理并不理解,欢迎带佬指导一波。