sql >> Databasteknik >  >> RDS >> Mysql

Hur tar jag bort emoji-tecken från en sträng?

Förutsatt att du bara vill ta bort alla icke-BMP-tecken, d.v.s. allt med en Unicode-kodpunkt på U+10000 och högre, kan du använda ett regex för att ta bort alla UTF-16 surrogat kodenheter från strängen. Till exempel:

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
    }
}

Här är "Cs" Unicode-kategorin för "surrogat".

Det verkar som om Regex fungerar baserat på UTF-16-kodenheter snarare än Unicode-kodpunkter, annars skulle du behöva ett annat tillvägagångssätt.

Observera att det finns andra tecken som inte är BMP än emoji, men jag misstänker att du kommer att upptäcka att de kommer att ha samma problem när du försöker lagra dem.




  1. Ta bort dubbletter av rader i MySQL (ignorerar primärnyckel)

  2. Hitta partitioneringskolumnen för en partitionerad tabell i SQL Server (T-SQL)

  3. En anslutning upprättades med servern, men sedan uppstod ett fel under handskakningen före inloggningen

  4. Hur man lägger till kolumn för automatisk ökning i befintlig tabell i MySQL