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:

"\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

 

转载于:https://www.cnblogs.com/jx-z/p/10451318.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值