1997年,日本人发明,定义在unicode的私有区域。

此时两个字节可以表示emoji。

IOS 4在日本支持emoji,使用的是这种私有编码。

2010年,unicode 6.0正式支持emoji,所有emoji重新编码。

此时的emoji所在的编码范围超出了2个字节。

IOS 5开始,支持unicode的emoji,放弃对日本人的私有emoji支持。

所以,同一个emoji,尤其是老的那些emoji,有两个编码。

不同系统的支持情况,不一样。

emoji的编码虽然相同,但是样子都是有专利的,因此各个系统,展示起来可能各不相同。

因为unicode的emoji超出了2个字节的表示范围,很多系统需要字符编码才能支持emoji。比如mysql,在更新了utf8mb4之后才支持。

日本人的编码,其实也不止一种,如果想要你的emoji在所有系统都能展示,需要你在展示的时候做转换。

emoji的发展历程、unicode编码演化、以及各种系统对字符串编码格式支持的变迁,三者交互在一起,引发各种有趣的问题。几乎每一次emoji不能展示,背后都与这三者相关。

因为涉及到系统底层的编码支持,很多时候问题不好解决。

本来想细细地写一篇文章,最近身体不适,精力不允许了。感兴趣的阅读下我列出的参考资料,很有意思。

Reference

https://gist.github.com/mranney/1707371#file-emoji_sad-txt
https://en.wikipedia.org/wiki/Emoji
http://doc.cat-v.org/bell_labs/utf-8_history
https://emojipedia.org/unicode-6.0/
https://stackoverflow.com/questions/7856775/how-to-convert-the-old-emoji-encoding-to-the-latest-encoding-in-ios5
https://en.wikipedia.org/wiki/Private_Use_Areas
https://www.iamcal.com/emoji-in-web-apps/

Emoji来龙去脉的更多相关文章

  1. Emoji选项列表

    一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...

  2. nodejs项目mysql使用sequelize支持存储emoji

    nodejs项目mysql使用sequelize支持存储emoji 本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情. 因由 最近项目遇到用户在文本输入emoji进行存储的时候导 ...

  3. [修正] Firemonkey Android 显示 Emoji (颜文字)

    问题:在 Android 平台下,显示 Emoji 文字,无法显示彩色(皆为黑色),例如 Edit 控件,即使将 Edit.ControlType = Platform 设为平台原生控件,还是没用(真 ...

  4. emoji哈哈哈哈

    Unicode 官网上的FAQ令人发笑,啊哈哈哈 Q: What are the most popular emoji characters? Q: Do emoji characters have ...

  5. 移动前端手机输入法自带emoji表情字符处理

    今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下 ...

  6. emoji表情 与 iconfont 一锅炖😂

    什么是emoji?

  7. JS操作Unicode编码的emoji表情显示在页面

    前言:项目中用到了emoji表情,后端传递数据时直接是以Unicode形式,在页面总是无法展示,找尽各种方法总算是试出了一种,虽然达到效果但是并不是特别理解其中的原理并且无比笨拙,贴在这用作笔记,如果 ...

  8. IOS Emoji表情

    IOS Emoji 前言:我比较喜欢有趣的东西,有一些有趣的小东西,可能不是多么多么牛逼,也可能不需要多高深的技巧,也不会为其他什么强大的功能而服务,但是有时候将很多有趣的小东西组合起来运用,比如在你 ...

  9. mysql 存储 emoji报错( Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F)的解决方案

    1.报错原因: mysql utf-8 编码储存的是 2-3个的字节,而emoji则是4个字节. 2.解决办法: 修改mysql的配置文件,windows下的为my.ini(linux下的为my.cn ...

随机推荐

  1. 跟着文档学习gulp1.1安装入门

    Step1:检查是否已经安装了node,npm 和 npX是否正确安装 Step2:安装gulp命令行工具(全局安装gulp) npm install --global gulp-cli Step3: ...

  2. linux中文件压缩介绍

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/1c62bb7f-f ...

  3. Android.mk语法说明

    版权申明: 本文原创首发于以下网站,您可以自由转载,但必须加入完整的版权声明 博客园:https://www.cnblogs.com/MogooStudio/ csdn博客:https://blog. ...

  4. Android 布局阴影实现

    最近项目要求,ui有很多有关于阴影的设计要求,网上找了些实现方式,但都不是很理想.现在闲下来了,就寻思着自己写个阴影布局耍耍,以备后用.先说道说道我找到的几种阴影实现方式: 系统阴影 Andorid ...

  5. Springboot 错误处理机制

    SpringBoot默认的错误处理机制 即我们常见的白色的ErrorPage页面 浏览器发送的请求头: 如果是其他的请求方式,比如客户端,则相应一个json数据: 原理:是通过 ErrorMvcAut ...

  6. RedisSession (自定义)

    RedisSession (自定义) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Red ...

  7. 第2章:C++泛型机制的基石:数据类型表——《C++泛型:STL原理和应用》读书笔记整理

    第二章:C++泛型机制的基石--数据类型表 2.1 类模板的公有数据类型成员 2.1.1 类的数据类型成员   C++类中不仅可以定义数据成员和函数成员,而且还可以定义数据类型成员.在泛型设计中,类的 ...

  8. HTTP 400 与 SpringMVC的 HttpPutFormContentFilter、FormContentFilter

    前端发送了一个http PUT请求,如下, json_xml: {,},,}},,},,}},},}},,},{,}],,},,}},,,,},,}},},}},,},{,}],,},,}},,},{ ...

  9. IT兄弟连 HTML5教程 Media Queries的使用方法

    在上例中,我们使用Media Queries模块来根据3种不同尺寸的窗口使用3种不同的样式.通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确地作用于不同的媒体类型和同一媒体的不同条件 ...

  10. Ubuntu截图快捷键等_终端快捷键

    Uubuntu内设置了不少快捷键,很方便,不少和windows的相同 在“设置”>“设备”>“键盘”下可以查看 终端里的快捷键可以帮你飞起,尤其是复制粘贴:(“编辑”>“首选向”&g ...