从 unicode 生成表情符号然后提取 unicode 给出不同的 unicode

Generating an emoji from unicode and then extracting unicode gives a different unicode

一和二是用不同的 uni-code 创建的。

但他们给出了相同的表情符号。

现在有趣的一点是 Unicode 与一个完全不同的值。

one = String.fromCodePoint(parseInt("1f436",16))
two = String.fromCodePoint(parseInt("d83d",16),parseInt("dc36",16))
one === two
one.length
one.codePointAt(0).toString(16) + '-' + one.codePointAt(1).toString(16)

代码点值的范围从 U+0000 到 U+10FFFF。


最初 JavaScript 有 Unicode escape sequences 正好由 4 个十六进制数字组成,表示一个代码点。 U+0000 到 U+FFFF 可以用这些表示。

例如:

>> 'I \u2661 JavaScript!'
'I ♡ JavaScript!'

在ES6中,JS引入了Unicode code point escapes

>> '\u{1F4A9}'
'' // U+1F4A9 PILE OF POO

大括号之间最多可以使用6个十六进制数字,足以表示所有的Unicode码位。

为了向后兼容 ECMAScript 5 和更旧的环境,不幸的解决方案是使用代理对:

>> '\uD83D\uDCA9'
'' // U+1F4A9 PILE OF POO

ECMAScript 6 引入了 String.prototype.codePointAt(position),它将尽可能处理代理项的一半和 returns 十六进制。

>> ''.codePointAt(0)
0x1F4A9

资料来源:https://mathiasbynens.be/notes/javascript-unicode

视频:https://www.youtube.com/watch?v=zi0w7J7MCrk