如何将表情符号字符写入textarea

时间:2016-02-01 23:37:58

标签: javascript unicode reactjs textarea emoji

我正在尝试为将发布到各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实施emojione-pickerhttps://github.com/tommoor/emojione-picker),当您点击表情符号图标时,该对象会提供一个data对象:

{
    "unicode":"1f600",
    "unicode_alternates":"",
    "name":"grinning face",
    "shortname":":grinning:",
    ...
}

我不想使用shortname属性,而是使用实际表情符号的unicode值。我想在页面上<textarea>的当前光标位置插入unicode值。我正在使用表单值发布到Twitter,期望实际的表情符号字符(不是:微笑:或\ 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") =&GT; (实际笑脸表情符号)

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

console.log("\\u" + foo[0] + "\\u" + foo[1]) =&GT; “\ ud83d \ ude00”

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

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

我收到此错误: Uncaught SyntaxError: Unexpected token ILLEGAL(…)

2 个答案:

答案 0 :(得分:2)

使用String.fromCharCode:

findSurrogatePair(0x1f600)
.map((el) => parseInt(el, 16))
.map((el) => String.fromCharCode(el))
.join('')

但是,您在findSurrogatePair中将数字转换为字符串,并使用parseInt将数字转换回数字。

答案 1 :(得分:0)

更简洁的方式:

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

归功于:jnes