微信小程序> 微信公众号开发微信昵称中含有emoji字符串处理-微店的小程序可以添加到公众号吗-微信公众号如何添加小程序

微信公众号开发微信昵称中含有emoji字符串处理-微店的小程序可以添加到公众号吗-微信公众号如何添加小程序

浏览量:1604 时间: 来源:严兵123
1.

最近在做一个基于微信公众号开发的微店商城项目,本人是java后台。需要存储从公众号进入我们商城的用户的微信昵称,由于Android和ios系统中存在emoji这种特殊字符,导致我从微信接口中获取到的微信昵称中如果含有emoji字符,插入数据库就会报错(mysql数据库)。

2.

报错信息:Incorrectstringvalue:'xF0x9FxA4x973...'forcolumn'nick_name'atrow1

3.

百度了解知道:emoji表情符采用Unicode6标准,采用4个byte字节存储一个emoji表情符,而我们的mysql数据库采用UTF-8编码格式时,采用3个byte字节存储一个字符,这样插入数据库就会报错。好在mysql5.5.3之后新增了一个utf8mb4字符集,专门用来兼容4字节的Unicode字符。

解决办法:一、如果非得存储emoji表情。mysql5.5.3以下的升级数据库,本来就是5.5以上的直接修改字符集和排序规则,注意一定要同时把排序规则也一起修改了。1.修改数据的字符集和排序规则,如下图:2.修改表中该字段的字符集和排序规则3.重启数据库,再次插入就不会报错。emoji在数据库中还是无法正常显示。二、直接将emoji表情过滤,我还是觉得这种办法方便,毕竟重装数据库对业务有很大的影响,特别是该数据库中有别的线上项目的数据时根本不允许重装。/***@Title:emoji特殊处理*@author:yanbing*@date:2017-12-0510:15*/publicclassEmojiStringUtils{/***@Title:判断是否存在特殊字符串*@param*@author:yanbing*@date:2017-12-0510:14*/publicstaticbooleanhasEmoji(Stringcontent){PatternpatternPattern.compile("[ud83cudc00-ud83cudfff]|[ud83dudc00-ud83dudfff]|[u2600-u27ff]");Matchermatcherpattern.matcher(content);if(matcher.find()){returntrue;}returnfalse;}/***@Title:替换字符串中的emoji字符*@param*@author:yanbing*@date:2017-12-0510:17*/publicstaticStringreplaceEmoji(Stringstr){if(!hasEmoji(str)){returnstr;}else{strstr.replaceAll("[ud83cudc00-ud83cudfff]|[ud83dudc00-ud83dudfff]|[u2600-u27ff]","");returnstr;}}}附注:emoji表情符的编码表:http://punchdrunker.github.io/iOSEmoji/table_html/flower.html20174.

2017/12/614:17后记:

5.

本人在升级数据库后(mysql5.6),按照上述方法一操作,发现还是无法插入带有emoji标签的字符,检查我的数据库字符集发现:

6.

执行:SHOWVARIABLESWHEREVariable_nameLIKE'character_set_%'ORVariable_nameLIKE'collation%';

7.

出现:

character_set_clientutf8character_set_connectionutf8character_set_databaseutf8mb4character_set_filesystembinarycharacter_set_resultsutf8character_set_serverlatin1character_set_systemutf8collation_connectionutf8_general_cicollation_databaseutf8mb4_general_cicollation_serverlatin1_swedish_ci发现character_set_serverlatin1,百度知道latin1是ISO-8859-1的别名,也就是说安装数据库是选择的字符集是ISO-8859-1,导致我们新建数据库时服务器字符集(character_set_server)默认为iso-8859-1,解决方法:Linux版本的mysql安装后一般会有一个my.cnf文件,在etc目录下,cd/etc进入my.cnf目录,vimmy.cnf进入编辑模式,在[mysqld]下面增加两行配置:character_set_serverutf8mb4collation_serverutf8mb4_general_ci重启数据库:servicemysqldrestart;再次查询所有字符集都是utf8编码的,插入数据也成功character_set_clientutf8character_set_connectionutf8character_set_databaseutf8mb4character_set_filesystembinarycharacter_set_resultsutf8character_set_serverutf8mb4character_set_systemutf8collation_connectionutf8_general_cicollation_databaseutf8mb4_general_cicollation_serverutf8mb4_general_ci

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎