如何将表情符号字符写入文本区域
How can I write emoji characters to a textarea
我正在尝试为将 post 用于各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实现 emojione-picker
(https://github.com/tommoor/emojione-picker),它提供了一个 data
对象,当您单击表情符号图标时,它看起来像这样:
{
"unicode":"1f600",
"unicode_alternates":"",
"name":"grinning face",
"shortname":":grinning:",
...
}
我不想使用 shortname
属性,而是 unicode
实际表情符号的值。我想在页面上 <textarea>
的当前光标位置插入 unicode 值。我正在使用 post 到 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 转换回数字..
更简洁的方式:
function findSurrogatePair(point) {
var offset = point - 0x10000,
lead = 0xd800 + (offset >> 10),
trail = 0xdc00 + (offset & 0x3ff);
return String.fromCharCode(lead) + String.fromCharCode(trail);
}
归功于:jnes
我正在尝试为将 post 用于各种社交媒体网络的表单设置表情符号选择器控件。我正在尝试实现 emojione-picker
(https://github.com/tommoor/emojione-picker),它提供了一个 data
对象,当您单击表情符号图标时,它看起来像这样:
{
"unicode":"1f600",
"unicode_alternates":"",
"name":"grinning face",
"shortname":":grinning:",
...
}
我不想使用 shortname
属性,而是 unicode
实际表情符号的值。我想在页面上 <textarea>
的当前光标位置插入 unicode 值。我正在使用 post 到 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 转换回数字..
更简洁的方式:
function findSurrogatePair(point) {
var offset = point - 0x10000,
lead = 0xd800 + (offset >> 10),
trail = 0xdc00 + (offset & 0x3ff);
return String.fromCharCode(lead) + String.fromCharCode(trail);
}
归功于:jnes