下述网址的表情包兼容了网页、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/
来源:oschina
链接:https://my.oschina.net/u/1263162/blog/599824