Emoji,即绘文字(日语:絵文字/えもじ)。
Emoji在计算机中是当作一个字来显示的,类似于“a”,或者“你”。
计算机是二进制的,为什么能显示0和1以外的字符?
因为计算机里存了一张表,记录二进制地址对应的字或符号,最早的这张表是ASCII:
ASCII
ASCII(American Standard Code for Information Interchange)是美国标准信息交换码
-
第一版于1963年发布。
-
包含128个字符。
ASCII只能表示数字和英文,其它语言和特殊的字符怎么办,于是有了它的超集Unicode。
Unicode
Unicode是国际/多语言文本字符编码系统,称为万国码/统一码
-
第一版于1988年发布。
-
截至2020年3月,共有143,859个字符。
-
一共有17个平面(Plane) ,取值范围是U+000000 ~ U+10FFFF,一共有17*65536=1,114,112个码点(Code Point)。
(Unicode 字符集为每一个字符分配一个码位,例如”知“的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。
-
包含1个基本平面(BMP) 和16个增补平面(SP)。
-
BMP(Basic Multilingual Plane 基本多语言平面),也叫 Plane 0,它的码点范围是 U+0000 ~ U+FFFF,这也是我们最常用的平面。
-
SP(Supplementary Multilingual Plane 增补平面),包含中文、Emoji(💩:U+1F4A9)等等。
-
symbol/glyph <=> code point <=> unique name。
-
💩(U+1F4A9)在代码中用”\uD83D\uDCA9“(surrogate pair)表示,string length !== char count,'💩'.length === 2。
-
💩的字符串长度是2。
UTF-8
UTF-8(Variable-width Character Encoding )可变宽度字符编码
-
Unicode 是”字符集“,UTF-8 是”编码规则“
-
字符集:为每一个”字符“分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
-
编码规则:将”码点“转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
参考
JavaScript ♥ Unicode
Unicode官网
ASCII-维基百科
Unicode-维基百科
阿里面试官让我讲讲Unicode
Unicode 和 UTF-8 有什么区别