关于微信昵称中Emoji表情乱码问题解决方案
问题描述
我相信每个人在刚接触小程序开发的时候都会遇到这个问题:小程序用户授权的时候,如果微信昵称里面带有Emoji表情的昵称,保存到数据库里,在界面显示的时候就乱码了。
当然微信昵称乱码只是一个最常遇到的场景,在其他包含Emoji表情的地方,该问题都会暴露出来。
如下图所示:
正常文本
[图片]
乱码文本
[图片]
问题解决方案
在本文我会总结两种解决方案,第一种解决方案是我在之前查阅相关文档,亲测实现的,当时在采用第二种解决方案的时候遇到了问题,采用的不得已方案,后面等第二种方案亲测实现后,才发现第二种方案是真香。
第一种解决Emoji表情乱码的方案
将包含该Emoji表情的信息encodeURIComponent编码,在使用的地方,在decodeURIComponent解码,这种方案已在小程序 “垃圾分类黑板报”中亲测,如下图所示:
[图片]
这种方案不算好,仅仅是解决了乱码的问题,带来了代码的额外编码解码开支。
第二种解决Emoji表情乱码的方案
按照我采用Mysql数据库,PHP YII2框架来描述
两步走
在数据库连接的时候采用utf8mb4,这一点非常重要,很容易遗漏。
数据库编码和表格编码以及对应的存储字段都应采用utf8mb4编码
关于第一步在代码示例如下
[图片]
该方案在小程序"群黑板报"中,亲测可用。
[图片]
这种方案是最完美的方案,没有带来额外的代码开支,也是目前网上能搜到的推荐使用方案,但是在实操过程中,有时候会因为数据库版本或者个人设置导致不生效,但是该方案确实香。
部分文章推荐
下面推荐几篇文章用来普及下为什么正常情况下Emoji表情存储到数据库里面就会乱码了
关于微信授权获取昵称含Emoji表情引发的乱码问题总结
https://developers.weixin.qq.com/community/develop/article/doc/000c84d49d4058d35e99bbaef5b013