如何从字符串中删除表情符号字符?

我从移动设备获得了文本输入。 它包含表情符号。 在C#中,我将文本作为

Text 🍫🌐 text 

简单地说,我想要输出文本

 Text text 

我试图用rejex从文本中删除所有这样的表情符号..除了,我不知道如何将该表情符号转换为它的unicode序列..我该怎么做?

编辑:

我正在尝试将用户输入保存到mysql中。 它看起来像mysql UTF8并不真正支持unicode字符, 正确的方法是通过更改架构,但我认为这不是我的选择。 所以我试图删除所有的表情符号字符,然后将其保存在数据库中。

这是我相关专栏的架构:

在此处输入图像描述

我使用Nhibernate作为我的ORM,生成的插入查询如下所示:

 Insert into `Content` (ContentTypeId, Comments, DateCreated) values (?p0, ?p1, ?p2); ?p0 = 4 [Type: Int32 (0)]. ?p1 = 'Text 🍫🌐 text' [Type: String (20)], ?p2 = 19/01/2015 10:38:23 [Type: DateTime (0)] 

当我从日志中复制此查询并直接在mysql上运行时,我收到此错误:

 1 warning(s): 1366 Incorrect string value: '\xF0\x9F\x98\x80 t...' for column 'Comments' at row 1 0.000 sec 

此外,我已经尝试将其转换为编码字节,它并没有真正起作用..

在此处输入图像描述

假设您只想删除所有非BMP字符,即Unicode代码点为U + 10000及更高的任何字符,您可以使用正则表达式从字符串中删除任何UTF-16 代理代码单元。 例如:

 using System; using System.Text.RegularExpressions; class Test { static void Main(string[] args) { string text = "x\U0001F310y"; Console.WriteLine(text.Length); // 4 string result = Regex.Replace(text, @"\p{Cs}", ""); Console.WriteLine(result); // 2 } } 

这里“Cs”是“代理”的Unicode类别。

似乎Regex基于UTF-16代码单元而不是Unicode代码点工作,否则您需要一种不同的方法。

请注意,除了表情符号之外还有非BMP字符,但我怀疑当你试图存储它们时你会发现它们会遇到同样的问题。