如何读取/解释字符串中的表情符号/ Unicode字符?
我正在创建数据网格的CSV导出,并且想要创建一个Twitter表情符号的字符串表示库。我想用它的字符串表示替换表情符号。
这是一个字符串示例:
Absa!!!!
这是CSV版本的样子:
😂😂😂 Absa!!!!
我想这样做:
(FACE WITH TEARS OF JOY) (FACE WITH TEARS OF JOY) (FACE WITH TEARS OF JOY) Absa!!!!
我从这个网站获得了Unicode,字节(UTF-8)和表情符号的详细信息:http://apps.timwhitlock.info/emoji/tables/unicode
= U+1F602 \xF0\x9F\x98\x82 FACE WITH TEARS OF JOY
我甚至不知道从哪里开始!我假设有一堆if语句的正则表达式?如果表情符号与正则表达式匹配,则它将替换为其文本版本。
我发现了很多关于删除表情符号的有用帖子,但没有更换它们。这是一个例子:
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g
同一篇文章中有许多其他有用的答案:How to remove emoji code using javascript?
感谢您的反馈,意见和建议!
谢谢!
答案 0 :(得分:0)
以下是我的解决方案:
<强>结果:强> 表情符号将转换为其字符串表示形式。这对情感分析很有用。
(function () {
/**
*
* @param {string} string String to convert
* @param {boolean} [fill] leaves the emoji in place, and inserts the description afterwards
* @param {boolean} [omitSkinColour] removes skin colour from both the emoji if fill is true, and the description
* @returns {string} Emoji-less string
*/
'use strict';
angular
.module('portalDashboardApp')
.factory('ReplaceEmojiService', ReplaceEmojiService);
ReplaceEmojiService.$inject = [];
function ReplaceEmojiService() {
var service = {
replaceEmoji: replaceEmoji
};
return service;
function replaceEmoji(str, fill, omitSkinColour) {
var dictionary = {
"35": {
"8419": {
"name": "keycap: #"
},
"65039": {
"8419": {
"name": "keycap: #"
}
}
},
"42": {
"8419": {
"name": "keycap: *"
},
"65039": {
"8419": {
"name": "keycap: *"
}
}
}
}
fill = fill || false;
omitSkinColour = omitSkinColour || false;
if (omitSkinColour) {
str = str.replace(/(?:\uD83C[\uDFFB-\uDFFF])/g, '');
}
var newStr = '';
for (var i = 0; i < str.length;) {
var localDict = dictionary;
var j = i;
var char = str.charCodeAt(j);
while (localDict.hasOwnProperty(char)) {
localDict = localDict[char];
char = str.charCodeAt(++j);
}
if (localDict.name) {
if (fill) {
newStr += str.slice(i, j) + '(' + localDict.name + ')';
} else {
newStr += '(' + localDict.name + ')';
}
} else {
newStr += str[i];
}
i += j - i || 1;
}
return newStr;
}
};
})();