05- Unicode 编码

2018-08-21  本文已影响18人  夏海峰

1、Unicode 编码

JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。
但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

// 写法  \u{}
"\u{20BB7}"

"\u{41}\u{42}\u{43}"
// ABC

let hello = 123;
hell\u{6F} === hello;   // true

'\u{1F680}' === '\uD83D\uDE80';
// ES6大括号表示法 与 两个双字节(4字节)的UTF-16编码是等价的。

6种表示字符的方式:

"\z" === "z";
"\172" === "z";
"\x7A" === "z";
"\u007A" === "z";
"\u{7A}" === "z";   // ES6表示法

JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。

// 1字符 = 2字节     c.length = 1
// 2字符 = 4字节     c.length = 2
var s = '𠮷';   // 它的Unicode码点大于0xFFFF
s.length;   // 2

var t = '夏';   // 它的Unicode码点小于0xFFFF
t.length;   // 1

2、codePointAt() 方法

codePointAt() 方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。

function is32Bit(c) {
    // 4字节的字符,它的Unicode码点大于0xFFFF
    return c.codePointAt(0) > 0xFFFF;
}
is32Bit("𠮷");   // true
is32Bit("夏");   // false

完!!!
上一篇下一篇

猜你喜欢

热点阅读