先看下js中的字符转码格式
要完全理解这些,还需要一些编码知识
ASCII码
ASCII 码一共定义了 128 个字符,例字母 a 是 97 (0110 0001)。这 128 个字符只使用了 8 位二进制数中的后面 7 位,最前面的一位统一规定为 0。 ASCII 码止共定义了128个字符,其中33个字符无法显示。0010 0000 ~ 0111 1110 (32-126)是可以显示的 ,基本都能使用键盘打出来, 具体参见对照表: ASCII编码对照表**[2]**。 ASCII 额外扩展的版本 EASCII,这里就可以使用一个完整子节的 8 个 bit 位表示共 256 个字符,其中就又包括了一些衍生的拉丁字母。可以参见 extended-ascii-table[3]。
Unicode 和 码点
Unicode是字符集,是js语言主要解析的编码,为了兼容ASCII,Unicode规定前0-127个字符是和ASCII是一样的,不一样的是128-255这一部分。
下面是ASCII的128-255部分的编码,三重水印
然后是Unicode的
每个字符对应的数字就叫码点,我们可以用charCodeAt和codePointAt转换获取
UTF-8, UTF-16
我们平时接触比多的就是UTF-8和UTF-16,均是Unicode字符编写的一种实现。我们JS编码的字符串是UTF-16格式来存储的和表示的。 UTF-16对于码点小于0xFFFF的用2个字节(1个编码单元)表示,大于0xFFFF的编码用四个字节(2个编码单元)表示。具体的体现可以表现在字符的长度上。
进制转换
我们可以使用数字实例toString()10进制转为相对应的进制。 接下来有这些基础知识之后,我们可以再研究下js的字符串了 参考: 字母a的6中表示方法吗,以及其背后含义