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大多被用在文件编码。