【问题标题】:How can I write emoji characters to a textarea如何将表情符号字符写入文本区域
【发布时间】:2016-05-10 14:38:42
【问题描述】:

我正在尝试为将发布到各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实现emojione-picker (https://github.com/tommoor/emojione-picker),它提供了一个data 对象,当您单击表情符号图标时,它看起来像这样:

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

我不想使用shortname 属性,而是将unicode 值用于实际表情符号。我想在页面上 <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(…)

【问题讨论】:

  • 0x1f600 实际上是一个数字,而不是一个字符串。

标签: javascript unicode reactjs textarea emoji


【解决方案1】:

使用 String.fromCharCode:

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

但是你在findSurrogatePair 中将数字转换为字符串,然后在parseInt.. 中将 n 转换为数字。

【讨论】:

  • 谢谢!这样可行。你有更好的建议来达到同样的结果吗?就目前而言,我必须将0x 添加到从data 传递的值中,并使用这种复杂的方法转换为字符串,然后再转换回int。
【解决方案2】:

更简洁的方式:

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

感谢:jnes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2012-06-19
    • 2023-03-08
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多