我正在尝试为将发布到各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实现 emojione-picker
( https://github.com/tommoor/emojione-picker ) 它提供了一个 data
单击表情符号图标时看起来像这样的对象:
{
"unicode":"1f600",
"unicode_alternates":"",
"name":"grinning face",
"shortname":":grinning:",
...
}
我不想使用 shortname
属性,而是 unicode
实际表情符号的值(value)。我想在 <textarea>
的当前光标位置插入 unicode 值在页面上。我正在使用表单值发布到 Twitter,它期望实际的表情符号字符(不是 :smile: 或\u1f600 )
看完这篇文章(http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript)后,我发现我可以使用一个 findSerrogatePair 方法将 unicode 值转换为转义序列(?),就像这样:
function findSurrogatePair(point) {
// assumes point > 0xffff
var offset = point - 0x10000,
lead = 0xd800 + (offset >> 10),
trail = 0xdc00 + (offset & 0x3ff);
return [lead.toString(16), trail.toString(16)];
}
然后我尝试了这个:
foo = findSurrogatePair('0x1f600') => ["d83d", "de00"]
使用这些值,我可以在控制台看到实际的笑脸字符日志:
console.log("\ud83d\ude00")
=>(真正的笑脸表情符号)
但是如果我尝试从 foo
中读取值并添加\u,我看到字符代码:
console.log("\\u" + foo[0] + "\\u" + foo[1])
=> "\ud83d\ude00"
如果我只使用一个反斜杠:
console.log("\u" + foo[0] + "\u" + foo[1])
我得到这个错误:
Uncaught SyntaxError: Unexpected token ILLEGAL(…)
最佳答案
使用 String.fromCharCode:
findSurrogatePair(0x1f600)
.map((el) => parseInt(el, 16))
.map((el) => String.fromCharCode(el))
.join('')
但随后您在 findSurrogatePair
中将数字转换为字符串,然后使用 parseInt
将 n 转换回数字..
关于javascript - 如何将表情符号字符写入文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142493/