Javascript 如何将表情符号写入文本区域

Javascript 如何将表情符号写入文本区域,javascript,unicode,reactjs,textarea,emoji,Javascript,Unicode,Reactjs,Textarea,Emoji,我正在尝试为一个表单设置一个表情选择器控件,该表单将发布到各种社交媒体网络。我正在尝试实现emojione选择器(),它提供了一个数据对象,当您单击一个emoji图标时,该对象如下所示: { "unicode":"1f600", "unicode_alternates":"", "name":"grinning face", "shortname":":grinning:", ... } 我不想使用shortname属性,而是实际表情符号的unicode

我正在尝试为一个表单设置一个表情选择器控件,该表单将发布到各种社交媒体网络。我正在尝试实现
emojione选择器
(),它提供了一个
数据
对象,当您单击一个emoji图标时,该对象如下所示:

{
    "unicode":"1f600",
    "unicode_alternates":"",
    "name":"grinning face",
    "shortname":":grinning:",
    ...
}
我不想使用
shortname
属性,而是实际表情符号的
unicode
值。我想在页面上
的当前光标位置插入unicode值。我正在使用表单值发布到Twitter,它期望实际的表情符号(不是:smile:or\u1f600)

阅读本文()后,我发现我可以使用FindErrorGatepair方法将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')=>

使用这些值,我可以在控制台上看到实际的笑脸字符日志:

console.log(“\ud83d\ude00”)
=>(实际的微笑表情符号)

但是如果我尝试从
foo
读取值并添加\u,我会看到字符代码:

console.log(“\\u”+foo[0]+“\\u”+foo[1])
=>“\ud83d\ude00”

如果我只使用一个反斜杠:

console.log(“\u”+foo[0]+“\u”+foo[1])

我得到这个错误:
未捕获的语法错误:意外标记非法(…)
使用字符串。fromCharCode:

findSurrogatePair(0x1f600)
.map((el) => parseInt(el, 16))
.map((el) => String.fromCharCode(el))
.join('')
但是,在
findSurrogatePair
中将数字转换为字符串,在这里使用
parseInt
将n转换回数字

更简洁的方式:

function findSurrogatePair(point) {
  var offset = point - 0x10000,
      lead = 0xd800 + (offset >> 10),
      trail = 0xdc00 + (offset & 0x3ff); 
  return String.fromCharCode(lead) + String.fromCharCode(trail);
}

归功于:jnes

0x1f600实际上是一个数字,而不是字符串。谢谢!这很有效。你有更好的建议来达到同样的效果吗?现在,我必须将
0x
添加到从
data
传递的值中,并使用这个复杂的方法将其转换为string,然后再转换回int。