何为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字符的最佳写法
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。