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. Node6-2单元测试 覆盖率Istanbul

    Step1:安装Istanbul npm install -g istanbul Step2:在package.json里面添加,具体参考Istanbul的API写法 "scripts&qu ...

  2. hdu 5532 Almost Sorted Array (水题)

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  3. poj 1679 The Unique MST (次小生成树模板题)

    Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...

  4. 关于云服务器中tomcat配置出现的部分问题以及解决方法

    问题描述:(一)tomcat的8080端口修改为80端口之后不能使用域名直接访问: (二)添加的项目不能通过域名直接访问(服务器端还待解决) 大致配置流程: 1.需要先购买合适的服务器,进行域名备案, ...

  5. 想要入行web前端要知道web前端的的基本工作职责

    入一行,要先知一行 ”:我们来看看web前端开发职位 无论什么门派都要做到的一些基本工作职责 首先,你必须是一个合格的“页面仔”,这个叫法不好听,但很生动: 我们都知道,所有呈现的内容都是基于HTML ...

  6. SpringBoot系列之集成logback实现日志打印(篇二)

    SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志 ...

  7. BOM对象——Location

    BOM对象--location <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  8. 使用shell脚本删除30天以前的文件

    #!/bin/bashlocation=/root/rmfind $location -mtime +30 -print | xargs rm -rf //-mtime是距离上一次修改时间 -prin ...

  9. Cross-Site Scripting:DOM 跨站点脚本:DOM

  10. What happened when new an object in JVM ?

    原文链接:https://www.javaspring.net/java/what-happened-when-new-an-object-in-jvm I. Introduction As you ...