什么是emoji?

??????????????????????☺????????????????

上一这一排就是emoji表情。一大波Windows用户懵逼了,这是什么鬼表情(这么丑),冒牌的吧,看起来和微信里的emoji表情差老远了。不信?你换个苹果系统(MAC或iOS)的看看,是不是一模一样了。再用安卓手机看看,好像又不一样了;换个WP系统的又不一样。

这到底是怎么一回事呢?去官网http://emojipedia.org/people/看看,一批熟悉又陌生的表情。第三个表情好像很有趣,点进去看看。哟,这不就是 笑cry 吗。

Codepoints
    ? U+1F602
Shortcodes
    :joy:

原来如此,是不同的操作系统对这个表情的画风不一样。而微信是使用了苹果系统的emoji画法作为自己的表情,最近的微信更新了一下表情,大家都看到了其实微信用来传输的并不是emoji的原编码,而是 [奸笑][嘿哈][捂脸][机智][皱眉] 等等的代名。

后面这里写的U+1F602就是指这个表情的Unicode编码是 1F602 的意思,:joy: 是该表情的简称,和微博里用[笑cry]代称是一样的。我们知道,常用的Unicode编码是双字节的,而这些emoji表情的Unicode编码比双字节还多出前面的1,那么按照Unicode转UTF8的规则,一个emoji表情在UTF8的文件中占用4个字节。GBK(或GB2312)编码中并没有emoji表情的编码,所以GBK编码的文本文件无法粘贴emoji表情,只会成为两个问号。GBK编码的网页也无法显示这种格式的emoji。

那么非Unicode系编码的网页就无法显示emoji表情了吗?当然不是,还可以通过替换文本成为图片的方式,传统的网页表情不就是这样做的嘛~~除此之外,还有另外一种方式可以让浏览器对GBK编码页面也支持emoji表情,我们稍后再谈。

来聊聊 iconfont

近年来流行出一种图标,叫做iconfont,中文名叫字体图标。个人认为,iconfont的流行跟bootstrap是有极大渊源的。字体图标的原理,就是把要用到的图标打包成一个字体文件(通常是*.ttf),然后网页里用Unicode码对应的文字,显示出对应的该图标。下面是一个精简的Bootstrap库的字体图标使用示例(仅演示原理不考虑IE字体格式兼容性)

<style>
@font-face {font-family: 'Glyphicons Halflings';src: url('./fonts/glyphicons-halflings-regular.ttf') format('truetype');
}
.glyphicon {font-family: 'Glyphicons Halflings';
}.glyphicon-user::before {content: "\e008";
}
</style><span class="glyphicon"></span>
<span class="glyphicon glyphicon-user"></span>

要显示一个图标,有两种方式:

一种是unicode引用,使用的原理是HTML转义序列,浏览器可以用 &#xXXXX; 的形式表示一个Unicode字符(十六进制),比如例子中的  就是表示Unicode为U+e008的字符,因为这个字符现在还没有被使用,所以如果没有引入这个字体的话,只会显示为一个方块码  。而在class里设定引入了这种字体,则会把这个方块码替换显示为对应的文字,也就是对应的图标。

另一种是font-class引用,每一个图标都有一个class,使用::before伪元素,content里面写上该图标的unicode码,用的是 \XXXX 的形式,使用哪个图标的时候就加上哪个图标的class。

这两种方式的根本原理是一样的,都是使用Uncode字体,两者的区别请参考中文官网。这两者都是独立于网页编码的,无论网页编码是UTF8还是GBK、BIG5 噼里啪啦,只要是个浏览器都能支持此类型的字符。字体图标不局限用于bootstrap中,其它一些衍生的前端库如 H-ui、Amaze UI 等也含有字体图标这功能。不使用这些框架的,也可以去阿里巴巴图标库去挑选打包下载自己喜欢的图标字体,或者自己画一些图标传到上面去跟大家分享~~

注意:火狐浏览器默认不允许跨域取字体(可能是出于对字体著作版权保护的原因),需要在存放字体的服务器添加一个允许跨域的header。以apache为例,先开启headers_module功能模块(可能要安装),再在字体目录放置一个.htaccess文件,内容如下

#允许火狐浏览器跨域取字体
<FilesMatch "\.(ttf|otf|eot|woff)$"><IfModule mod_headers.c>  #允许所有域Header set Access-Control-Allow-Origin "*"</IfModule>
</FilesMatch>

最后,emoji与iconfont两者有关系吗?

初看起来,emoji 与 inconfont 似乎并没有什么关系。但是 他山之石,可以攻玉。还记得刚才使用emoji表情的时候有什么问题吗?

  1. 只支持UTF8编码的网页,不支持GBK编码;
  2. 不同的操作系统,显示的emoji表情不一致,有的甚至显示不出来;
  3. 木有定制或者新加自己的emoji表情;

第一题。如果是GBK编码使用HTML转义,保存时全部emoji表情转码成 &#xXXXX; 的形式,输出时也是使用这种显示,浏览器会自动把它们显示为emoji符号。如果是UTF8编码,那就什么都不用做啦。
第二题。使用一种emoji表情符号制作成字体文件,对应到相应的emoji表情的unicode,引入该字体不就直接显示了嘛。
第三题。木有“滑稽”、木有“呵呵”、木有“doge”,自己动手丰衣足食,反正Unicode编码还有一大把编码是没人用的。
最后,怎么输入呢?手机上的输入法就有emoji输入。电脑上有的输入法也有,没有的话可以装浏览器插件(chrome用户自备梯子)。想给用户用,那就写个表情选择框啰。

为什么要使用自定义字体的emoji表情?技术总在进步,我们可以不用现在绝大多网站和APP的表情处理方式:图片转成编码传输和保存,又转图片来显示,手机上还要处理输入法的emoji编码与图片的转换。而现在只需要使用emoji符号,再加上一个字体文件,不用任何转换就可以全搞定了。

来一批老版本windows的黑白线条emoji~
??????????????????????☺????????????????

PS...因为阿里巴巴的图标字库网站不给力,生成不了彩色的ttf字体文件。我正在苦苦寻觅更先进的字体转换工具,有研究过的请留言,不胜感激。这里有一篇彩色字体的文章讲解,但涉及的内容我比较陌生,高手请看《探索在Android中使用Emoji Font的方法》。

姊妹篇:《彻底搞懂编码 GBK/GB2312 和 UTF8、Unicode》

emoji表情 与 iconfont 一锅炖相关推荐

  1. 【笔记11】uniapp点击复制;mysql数据库存储emoji表情;Java 二维码生成;uniapp引入自定义图标

    目录 前言 一.uniapp 实现点击复制某段文本 二.MySQL 数据库存储 emoji 表情 三.Layui 的富文本编辑器 四.谷歌 Java 二维码生成 (1) 引入 MAVEN 依赖 五.微 ...

  2. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

  3. 不要小看小小的 emoji 表情

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 前言 好久没更新了,最近事比较多,或许下个月就会恢复到正常的发文频 ...

  4. php mysql emoji表情_php 让MySQL支持Emoji表情 mysql 5.5.3+

    让MySQL支持Emoji表情 mysql 5.5.3+ 让mysql支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决 ...

  5. Emoji表情编解码库XXL-EMOJI

    2019独角兽企业重金招聘Python工程师标准>>> <Emoji表情编解码库XXL-EMOJI> 一.简介 1.1 概述 XXL-EMOJI 是一个灵活可扩展的Emo ...

  6. MySQL 字符串删除表情符_PHP处理字符中的emoji表情(判断/移除/存储)

    目录判断字符串中是否含有 emoji 表情 移除字符串中的 emoji 表情 含有 emoji 表情的字符串在 MySQL 中的储存 utf-8 编码的 emoji 表情或者某些特殊字符占用 4 个字 ...

  7. 【Android】显示Emoji表情字符

    一.下载AndroidEmoji.ttf字体 地址1:Github Android Platform 地址2:AndroidEmoji.ttf.zip 二.使用 2.1 将字体拷贝到assets/fo ...

  8. MySQL utf8mb4与emoji表情

    客户端工具 Navicat Premium_11.2.7简体中文完美破解版(32位和64位) 支持mb4 修改MySQL配置文件 修改mysql配置文件my.cnf(windows为my.ini) m ...

  9. mysql 5.6 emoji_让MySQL支持Emoji表情 mysql 5.6

    让 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.从库也必须是5.5的了.低版本不支持这个字符集.  复制报错 2 my.cnf 文件 ...

最新文章

  1. 第5天:基于类的视图与中间件
  2. linux中断的上半部和下半部
  3. The Linux device model
  4. Sublime text3 代码格式化插件vue
  5. Android 性能优化---(8)APP启动时间优化指南
  6. 使用JMeter测试WebSocket接口
  7. 如何使用四个语句来提高 SQL Server 的伸缩性
  8. Java毕业设计174例
  9. 双11 背后的全链路可观测性:阿里巴巴鹰眼在“云原生时代”的全面升级
  10. This file should be served over HTTPS. This download has been blocked. computed高级处理
  11. Maven Helper
  12. 表达式和语句的简单理解
  13. Android自定义键盘
  14. win7计算机文件浏览不了,win7系统计算机文件打不开的解决方法
  15. Golang2022最全面试题整理(附资料)
  16. HTML5七夕情人节表白网页制作【纯HTML+CSS实现3D动态相册-蓝色海洋 】HTML+CSS+JavaScript
  17. 解决宝塔安装wordpress无法连接到数据库问题
  18. 1m照片的宽和高是多少_1m等于多少kb(上传1m照片是多大尺寸)
  19. 风险投资(VC)私募股权投资(PE)30问答
  20. Hive ,Hsql行转列、列转行实现

热门文章

  1. Java基础第十三天总结
  2. 如何安全设置无线路由
  3. WinForm窗体间如何传值
  4. uniapp cross-env不是内部或外部_企业内部防泄密三部曲 严防祸起萧墙之内
  5. NetDevOps — ncclient
  6. Tungsten Fabric SDN — Device Manager
  7. Kubernetes — 调度系统
  8. OpenStack 的单元测试
  9. 快速理解 session/token/cookie 认证方式
  10. Openstack组件实现原理 — OpenVswitch/Gre/vlan