分类

Emoji 简介

作者: 阮一峰

日期: 2017年4月13日

一、含义

Emoji 是可以插入文字的图形符号。

它是一个日语词,e表示"絵",moji表示"文字"。连在一起,就是"絵文字"。

Emoji 在上个世纪90年代,由日本电信商引入服务,最早用于在短消息之中插入表情。2007年,苹果公司的 iPhone 支持了 Emoji,导致它在全世界范围的流行。

二、Unicode 标准化

早期的 Emoji 是将一些特定的符号组合替换成图片,比如将:)替换成😀。这种方法很难标准化,能够表达的范围也有限。

2010年,Unicode 开始为 Emoji 分配码点。也就是说,现在的 Emoji 符号就是一个文字,它会被渲染为图形。

由于越来越受欢迎,Emoji 的国际标准在 2015 年出台,目前已经是 5.0 版了。

  • Emoji 1.0:2015年8月
  • Emoji 2.0:2015年11月
  • Emoji 3.0:2016年6月
  • Emoji 4.0:2016年11月
  • Emoji 5.0 (beta):2017年3月

截止2017年4月,列入 Unicode 的 Emoji 共有2389个

三、渲染实现

Unicode 只是规定了 Emoji 的码点和含义,并没有规定它的样式。举例来说,码点U+1F600表示一张微笑的脸,但是这张脸长什么样,则由各个系统自己实现。

因此,当我们输入这个 Emoji 的时候,并不能保证所有用户看到的都是同一张脸。如果用户的系统没有实现这个 Emoji 符号,用户就会看到一个没有内容的方框,因为系统无法渲染这个码点。

目前,苹果系统安卓系统TwitterGithubFacebook 都有自己的 Emoji 实现。

四、使用方式

Emoji 虽然是文字,但是无法书写,必须使用其他方法插入文档。

(1)最简单的方法当然是复制/粘贴,你可以到 getEmoji.com 选中一个 Emoji 贴在自己的文档即可。

(2)另一种方法是通过码点输入 Emoji。以 HTML 网页为例,将码点U+1F600写成 HTML 实体的形式😀(十进制)或😀(十六进制),就可以插入网页。码点到这个页面查询。

(3)JavaScript 输入 Emoji,可以使用 node-emoji 这个库。



var emoji = require('node-emoji');

// 返回 coffee 的 Emoji
emoji.get('coffee'); 

// 返回文字标签对应的 Emoji
// https://www.webpagefx.com/tools/emoji-cheat-sheet/
emoji.get(':fast_forward:');

// 将文字替换成 Emoji
emoji.emojify('I :heart: :coffee:!');

// 随机返回一个 Emoji 
emoji.random();

// 查询 Emoji
// 返回结果是一个数组 
emoji.search('cof');

(4)还可以通过 CSS 插入 Emoji。


<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet">
<i class="em em-baby"></i>

五、Emoji 组合

Unicode 除了使用单个码点表示 Emoji,还允许多个码点组合表示一个 Emoji。

其中的一种方式是"零宽度连接符"(ZERO WIDTH JOINER,缩写 ZWJ)U+200D。举例来说,下面是三个 Emoji 的码点。

  • U+1F468:男人
  • U+1F469:女人
  • U+1F467:女孩

上面三个码点使用U+200D连接起来,U+1F468 U+200D U+1F469 U+200D U+1F467,就会显示为一个 Emoji 👨‍👩‍👧,表示他们组成的家庭。如果用户的系统不支持这种方法,就还是显示为三个独立的 Emoji 👨👩👧。

六、趣闻

根据 emojitracker 的调查,全世界最流行的 emoji,第一名是笑出眼泪 😂,第二名是红心❤️。

日历的 Emoji 📅(U+1F4C5) 在苹果系统之中,一律是7月17日。这是苹果公司发布 iCal 的日子。有人戏称这个日子是"世界 Emoji 日"。

七、参考链接

(完)

留言(33条)

额,原来评论不支持 emoji 的呀(,,•́.•̀,,)

我一直搞不清楚,要这个东西有什么用?另外一种语言吗?

实现个emoji手写输入法应该是可能的。Google不是发布了AutoDraw嘛

讲讲 浏览器的 SVGinOT

很多时候世界是多元的,一句话或者说一个对话场景中,对面的人看见你打字的 “微笑” 和 emoji 真正的笑脸显然是不一样的内心感受的,所以这就是 emoji 的作用,往大说便于沟通,往小了说跟小姐姐聊天你纯纯的打字儿么?发图片表情?这都什么年代了?

阮老师可以把自己的博客评论支持emoji的!

http://www.typeisbeautiful.com/2016/11/11221/
字谈字畅 035:Kerning Panic·字谈字串(三)

Emoji表情以拟人化的生动形象,超越国籍和文化,已经成为当下最流行的网络表情。其中,“笑中带泪”的表情更是在去年被牛津词典评为年度词汇。

那几张笑脸我一直以为是从QQ的聊天表情中来的,原来已经作为国际标准了

最主要的是不好看啊,不如QQ的表情经典

补充一个:MySQL 标准的 utf8 只支持三字节字符,所以不支持保存 emoji 字符。这是导致大多数网站支持 utf8 但不支持 emoji 的主要问题。解决方法是,MySQL 需要使用 utf8mb4。

很棒的一篇科普文

多亏看了这篇文章,检查发现用的emoji符号在不同的系统果然表现不同,在界面上改用了图标

严格来讲支不支持Emoji需要看字体,对吗?

重新认识emoji。
有个疑问:由于不同的平台有不同的表情样式,所以同一个表情在不同的平台上,用户看了会不会产生不一样的感受或者信息呢?

挺有意思的。

所以建议现在 MySQL 可以用 utf8mb4 编码

QQ 不是好多年前就有表情包了吗?难道那些不算是 emoji ?怎么会变成苹果普及了的,不明白。

引用馒头的发言:

讲讲 浏览器的 SVGinOT

引用刘的发言:

我一直搞不清楚,要这个东西有什么用?另外一种语言吗?

用处很大,文字交流往往会造成误会,因为不了解语境。没有emoji表情,会造成很多误会

很喜欢SKYPE下的各种moji表情,是简单的动画,感觉比emoji复杂些,但是制作的团队对聊天时候的表情有独到的理解,所以我总能比微信5毛的表情包找到更有意思的情感表达,就是不知道为什么不怎么红。比FB上土到渣的表情要好多。技术我还不怎么懂,有空您看下?

滑稽什么时候能登上世界舞台

😀

绘文字真是好东西,跨越种族跨越国界。我也最喜欢用笑着流泪的表情

以前就想过表情与编码转义的过程,一直没去找到相关的解读,没想到在这看到了,就但是补习一下知识吧

☺️

☺️
☺️☺️
☺️☺️☺️
☺️☺️☺️☺️
☺️☺️☺️☺️☺️
☺️☺️☺️☺️☺️☺️

刚好今天7.17我看到了这篇文章

所以数据库如果要存的话要用unicode?

☺️☺️☺️☺️阮老师的文章通俗易懂

U+1F468 U+200D U+1F469 U+200D U+1F467

其实也有多码点,且不使用u200d连接的emoji,比如各种国家的旗帜

原来如此,是根据码点,渲染成不同的emoji

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接