如何从字符串中删除表情符号字符?
How do I remove emoji characters from a string?
我从移动设备上输入了文本。它包含表情符号。在 C# 中,我将文本设为
Text text
简单地说,我希望输出文本是
Text text
我正在尝试使用 rejex 从文本中删除所有此类表情符号..除了,我不确定如何将该表情符号转换成它的 unicode 序列..
我怎么做?
编辑:
我正在尝试将用户输入保存到 mysql。看起来 mysql UTF8 并不真正支持 unicode 字符和 right way to do it would be by changing the schema 但我认为这不适合我。所以我试图在将其保存到数据库之前删除所有表情符号字符。
这是相关列的架构:
我使用 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 surrogate 来自字符串的代码单元。例如:
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" 是 "surrogate" 的 Unicode 类别。
看来 Regex
基于 UTF-16 代码单元而不是 Unicode 代码点工作,否则您需要不同的方法。
请注意,除表情符号外还有非 BMP 字符,但我怀疑您在尝试存储它们时会发现它们会遇到同样的问题。
我从移动设备上输入了文本。它包含表情符号。在 C# 中,我将文本设为
Text text
简单地说,我希望输出文本是
Text text
我正在尝试使用 rejex 从文本中删除所有此类表情符号..除了,我不确定如何将该表情符号转换成它的 unicode 序列.. 我怎么做?
编辑:
我正在尝试将用户输入保存到 mysql。看起来 mysql UTF8 并不真正支持 unicode 字符和 right way to do it would be by changing the schema 但我认为这不适合我。所以我试图在将其保存到数据库之前删除所有表情符号字符。
这是相关列的架构:
我使用 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 surrogate 来自字符串的代码单元。例如:
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" 是 "surrogate" 的 Unicode 类别。
看来 Regex
基于 UTF-16 代码单元而不是 Unicode 代码点工作,否则您需要不同的方法。
请注意,除表情符号外还有非 BMP 字符,但我怀疑您在尝试存储它们时会发现它们会遇到同样的问题。