首页 > 解决方案 > 从 unicode 生成表情符号然后提取 unicode 会给出不同的 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)

标签: javascriptunicodeemoji

解决方案


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


最初,JavaScriptUnicode 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

在大括号之间,您最多可以使用六个十六进制数字,这足以表示所有 Unicode 代码点。

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

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

ECMAScript 6 引入了String.prototype.codePointAt(position)which 将尽可能处理代理一半并返回十六进制。

>> ''.codePointAt(0)
0x1F4A9

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

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


推荐阅读