簡體   English   中英

如何從字符串中刪除表情符號字符?

[英]How do I remove emoji characters from a string?

我從移動設備輸入了文本。 它包含表情符號。 在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字符,但我懷疑您在嘗試存儲它們時會發現它們也會遇到相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM