javascript - 从 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)
解决方案
代码点值范围从 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
推荐阅读
- angular - 使用 @Viewchild 将 Angular 动态组件添加到特定位置
- isabelle - 有没有办法通过python与伊莎贝尔定理证明者进行通信?
- java - 尝试将 mapbox 地图添加到我的表格布局,但调用时地图未显示
- c# - 如何在 LINQ 谓词中进行简单的“=”检查以及字符串比较?
- java - 如何使用 gson 解析 json 文件?
- yocto - yocto - 如何重置映像,以便我可以重新运行安装后步骤
- android-studio - 无法在 AMD 上运行 Android Studio 模拟器 - 错误:x86
- perl - 将 Perl 与 xm_perl 模块一起使用时出错
- c++ - 使用模板和继承避免代码重复
- python - 如果条件满足,Python装饰器返回值,否则返回函数