何为unicode?

为了将全世界的文字都统一的记录下来,并将每个字符都用唯一的数字记录下来,于是就产生了Unicode。

Unicode 也称为 UCS(Universal Coded Character Set:国际编码字符集合) 是一个字符集合,对世界上大部分的文字系统进行了整理,编码,使电脑可以用更为简单的方式来呈现和处理文字。最新的版本 Unicode 11.0 已经包含了 137439 个字符

String.fromCodePoint()方法

ES5 提供String.fromCharCode()方法,用于从码点返回对应字符

 `String.fromCharCode(0x20BB7)`
`// "ஷ"`

但是这个方法不能识别 32 位的 UTF-16 字符(Unicode 编号大于0xFFFF

ES6 提供了String.fromCodePoint()方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode()方法的不足。在作用上,正好与codePointAt()方法相反。

  `String.fromCodePoint(0x20BB7)`
  `// "?"`
  `String.fromCodePoint(0x78, 0x1f680, 0x79) === 'xuD83DuDE80y'`
`// true`

如果String.fromCodePoint()方法有多个参数,则它们会被合并成一个字符串返回。
fromCodePoint()方法定义在String对象上,而codePointAt()方法定义在字符串的实例对象上。

String.prototype.codePointAt()

codePointAt() 方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。返回的是码点的十进制值。如果想要十六进制的值,可以使用toString()方法转换一下。

let s = '?a';
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

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

function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}

is32Bit("?")    // true
is32Bit("a")     // false

正则表达式u修饰符

此修饰符标识能够正确处理大于\uFFFF的Unicode字符
也就是说,会正确处理四个字节的UTF-16编码。
不加u修饰符,那么就无法将四个字节的UTF-16编码识别为一个字符,所以就可以产生匹配。
/^.$/.test(`"uD842uDFB7")//false`

/^.$/u.test(`"uD842uDFB7")//true`

\u6211=>\u{6211}   unicode字符的最佳写法

HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!


引用和评论

0 条评论