由于历史原因,JavaScript只能处理UCS-2编码。Unicode 编码单元(code points)的范围从 0 到 1,114,111(0x10FFFF),使用2个字节表示。在ES6之前,如果是4个字节的字符,会当作两个双字节的字符处理。
JavaScript中有2个获取码点(code point)的函数,String.prototype.charCodeAt(pos)和String.prototype.codePointAt(pos)。
charCodeAt()
方法返回0到65535之间的整数(2个字节表示),表示给定索引处的UTF-16代码单元。codePointAt()
方法返回 一个 Unicode 编码点值的非负整数(最大支持4个字节)。
举例
>>'?'.codePointAt(0).toString(16)
>>"20bb7"
>>'?'.charCodeAt(0).toString(16)
>>"d842"
>>'?'.charCodeAt(1).toString(16)
>>"dfb7"
可以看到,codePointAt方法可以直接获取到码点,而使用charCodeAt必须调用两次,从而获取一对码点。两者对应和转换关系,请参见Unicode与JavaScript。