JS中的unicode

js采用UTF-16来对unicode进行编码,在FFFF及更小的unicode码中,UTF-16编码与unicode码是一模一样的,所以'\uxxxx'直接根据unicode原码表就能查出所需要的字符,无需转换编码。

当unicode码大于FFFF时,utf-16就会引进标志位,用四个字节表示unicode编码,此时UTF-16编码就与我们查到的原unicode码完全不一样了。

而ES6中,可以使用'/u{xxxxx}' 直接根据unicode码,输出对应字符,无需转化成utf-16:  (xxxx是unicode码的16进制形式)

"\u{20BB7}"
// "𠮷"

上述字符,在ES6之前,只能通过转换utf-16来输出:

'\uD842\uDFB7'
//"𠮷"

 

补充:

charCodeAt()得到的是utf-16的编码的十进制数,并不是unicode编码,这一点很多文档都写错了

utf-8是可变长的,兼容ascii码,小于等于1字节时等同于unicode码,大于1字节时会有标志位,也就不同于unicode码

 

附:

UTF-16编码以16位无符号整数为单位。我们把Unicode编码记作U。编码规则如下:
如果U<0x10000,U的UTF-16编码就是U对应的16位无符号整数(为书写简便,下文将16位无符号整数记作WORD)。
如果U≥0x10000,我们先计算U'=U-0x10000,然后将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16编码(二进制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx

 

posted @ 2019-02-28 16:36  Love_night  阅读(3353)  评论(0编辑  收藏  举报