关于 Emoji、ASCII 和 Unicode

832 阅读2分钟

Emoji,即绘文字(日语:絵文字/えもじ)。

Emoji在计算机中是当作一个字来显示的,类似于“a”,或者“你”。

计算机是二进制的,为什么能显示0和1以外的字符?

因为计算机里存了一张表,记录二进制地址对应的字或符号,最早的这张表是ASCII:

ASCII

image.png

ASCII(American Standard Code for Information Interchange)是美国标准信息交换码

  • 第一版于1963年发布。

  • 包含128个字符

ASCII只能表示数字和英文,其它语言和特殊的字符怎么办,于是有了它的超集Unicode。

Unicode

image.png

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。

image.png

UTF-8

UTF-8(Variable-width Character Encoding )可变宽度字符编码

  • Unicode 是”字符集“,UTF-8 是”编码规则“

  • 字符集:为每一个”字符“分配一个唯一的 ID(学名为码位 / 码点 / Code Point)

  • 编码规则:将”码点“转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

参考

JavaScript ♥ Unicode
Unicode官网
ASCII-维基百科
Unicode-维基百科
阿里面试官让我讲讲Unicode
Unicode 和 UTF-8 有什么区别