C#将表情符号计为两个字符

时间:2017-06-23 12:28:30

标签: c# regex twitter emoji

Twitter API返回一个实体列表,其中包含指示实体在推文文本中开始和结束的开始/结束索引。

当推文文本包含表情符号时,对于文本中的每个表情符号,这些索引都会偏离1。推文文本中的每个表情符号都包含两个unicode字符(\ud83d\udc4c)。我的假设是,在C#中,这些被计为两个字符而不是一个,这使得所有索引都关闭(并且越来越多地取决于表情符号的数量)。

所以我查看了twemoji这是Twitter的官方表情符号库。这是使用正则表达式(see twemoji JS code)在文本中查找表情符号。我将这个正则表达式复制到我的代码中,用一个字符替换表情符号(稍后由图像替换,但现在X就足够了)。我复制模式,转义所有反斜杠,从开头删除/,从结尾删除/g。 C#然后很乐意接受正则表达式,我可以使用此代码将所有表情符号替换为X

string strippedText = Regex.Replace(text, emojiRegex, "X");

然而,有些推文似乎包含了emojis而不是(还有?)支持的twemoji,例如\ud83c\udffb,这导致我的剥离不会剥离所有内容和索引再次关闭。

我如何找到任何不受支持的表情符号并将其除去?有没有我可以使用的通用正则表达式,或者还有其他(和更好的)正则表达式'那里有更多的表情符号?

或者甚至更好,有没有办法让C#理解包含表情符号的字符串只将它们视为一个字符而不是两个?

0 个答案:

没有答案