javascript - 如何将表情符号字符写入文本区域

标签 javascript unicode reactjs textarea emoji

我正在尝试为将发布到各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实现 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/

相关文章:

c++ - 如何使一个函数同时适用于字符串和 wstring?

javascript - 如何等待redux准备好必要的数据

reactjs - 未知 Prop 警告

Javascript:未定义单词反转功能?

javascript - 选择列表元素(捕获向下/向上箭头)

c++ - 如何在 Windows API 中指定与编码无关的字符串常量?

javascript - 类型错误 : Cannot read property currentTime of undefined

javascript - websocket 是聊天应用程序的正确技术吗?

javascript - Iscroll div 不工作

delphi - 使用 Unicode 字符串调用时 StrLComp 与 AnsiStrLComp