unicode in JS

写的是unicode in JS,实际in js的部分不多,更多的是unicode原理。

两个重要概念

  • code point:在Unicode空间中,一个具体的字符所在位置
  • code unit:用来编码一个code point的数量,例如UTF8,使用1-4个code unit来编码一个Unicode code point。

Unicode now

现在的Unicode共占用21个二进制位,它们被分割成了17个plane,每个plane占用16个二进制位。举例几个plane:

plane 0: 0x0000-0xFFFF,Base Multilingual Plane (BMP)

plane 1: Supplementary Multilingual Plane (SMP)

plane 2: Supplementary Ideographic Plane (SIP)

UTF-x

UTF-32,使用32个二进制位表示unicode code point,而Unicode目前还没这么多,它会一一对应Unicode的位置,但显然占用很多空间。

UTF-16和UTF-8都是用变长code units来表示code point,例如UTF-8使用1-4个字节不等来表示Unicode,具体根据code point的位置来确定使用多少个code unit。

UTF-8的变长范围:plane 0中,分别使用1-3个code unit不等;剩下的都是4个code unit。

应用

我们对UTF-8应该相当熟悉,但UTF-16可能遇到的比较少,我也只遇到过一两次。。。而ECMAScript规范内部表示源代码是使用UTF16,JS中的string,也是UTF16。

UTF-8大多被用在文件编码。