app表情符保存到数据库的问题

下述网址的表情包兼容了网页、ios、apple等平台,图标的显示在各平台间可能有些差别,但基本上不需要自己单独再去做一套图标了。

emoji表情符全表

http://apps.timwhitlock.info/emoji/tables/unicode

在php中使用网页中的使用
<?php
$emoji = 'F09F9883';    //第三个表情符的utf-8形式:\xF0\x9F\x98\x83
echo hex2bin($emoji);
?>

在google chrom、safari、firefox浏览器可以显示正常的图标。

app里的使用也类似,只要将utf8转成对应的二进制字符再输出即可正常解释成一个图标。

复制发到微信也可以正常显示。

但微信使用的表情系统不是基于Unicode的,而且自己单独开发的,传统的使用占位符方式,如[微笑],发送后再解释成一个微笑的表情符,这种方案体验不是很好。至于为何微信选用此方案,可能是为了更好的兼容要求,毕竟开发的比较早,而且不同机型适配显示的问题,另外加上安全的考虑(emoji是基于扩展Unicode字符集实现的),在后台程序处理上要小心,否则经常会带来不必要的问题,如果这些不是主要考虑的问题,使用emoji的unicode方案不失为一种方便快速的实现。

微信的昵称是支持emoji的。

解决emoji写入数据库失败的问题
  • base64编码法。emoji是二进制的,所以在直接sql操作中可能会出错,要先将内容转成其他格式再保存,如用base64。

  • 针对mysql5.5以上版本,还有一种解决方案是将字段转为utf8mb4(因为emoji是4个字符的),同时保证mysql连接使用的是utf8mb4,如 SET NAMES utf8mb4

ALTER TABLE mytable charset=utf8mb4;
MODIFY COLUMN textfield1 VARCHAR(255) CHARACTER SET utf8mb4;
SET NAMES utf8mb4

 

JAVA连接池方式要修改my.cnf全局配置才会生效,同时修改连接串为 

jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8 (注意characterEncoding没有utf8mb4的参数,只能用utf-8)

如果仍有问题请检查jdbc连接包jar的版本,一般要5.1以上才对utf8mb4支持正常

vi /etc/my.cnf
[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'

 

国内各公司完美支持emoji的估计还不多。

 

参考

https://segmentfault.com/a/1190000000616820

http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/

https://fortawesome.github.io/Font-Awesome/icons/ 图标字库

https://fortawesome.github.io/Font-Awesome/cheatsheet/

 

 

转载于:https://my.oschina.net/swingcoder/blog/599824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值