JS字符编码笔记

更详细的参考 大神阮一峰的文章

这里只是记下自己的一些理解

1. js的字符状况

js采用的是UCS-2编码[当然是unicode字符集],特点是一个字符只是两个字节,而不像UTF-16(2,4个字节都有),但字符的规则跟UTF-16一致,如下:
基本平面的字符占用2个字节,辅助平面的字符占用4个字节,即UTF-16的编码长度要么是2个字节(U+0000到U+FFFF),要么是4个字节(U+010000到U+10FFFF)。
其中基本字符中的 ** U+D800 到 U+DFFF ** 对应空符,即不对应任何基本字符,故这一段的编码就用来映射辅助字符,其中** 高位用 U+D800到U+DBFF 底位用 U+DC00 到 U+DF00 ** ,也就是字符串在识别字符串是会根据这个规则,是显示基本字符,还是再读取后两位去显示辅助字符。
高地位的公式

H = Math.floor((c-0x10000) / 0x400)+0xD800
L = (c - 0x10000) % 0x400 + 0xDC00

示例请看 阮一峰的文章的 第八条

2. es6的改进

更智能的支持的Unicode,比如遍历字符串,可以使用

for(let s of string) {}

获取length Array.from(strong).length
反斜杠+u+码点 改为反斜杠+u+{+码点+}
添加了几个方法Array.fromCodePoint(), Array.prototype.codePointAt, Array.prototype.at ,正则式u的支持,normalize方法的支持

你可能感兴趣的:(JS字符编码笔记)