Ervan uitgaande dat u alleen alle niet-BMP-tekens wilt verwijderen, d.w.z. alles met een Unicode-codepunt van U+10000 en hoger, kunt u een regex gebruiken om een UTF-16 surrogaat te verwijderen code-eenheden uit de tekenreeks. Bijvoorbeeld:
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
}
}
Hier is "Cs" de Unicode-categorie voor "surrogaat".
Het lijkt erop dat Regex
werkt op basis van UTF-16-code-eenheden in plaats van Unicode-codepunten, anders zou u een andere aanpak nodig hebben.
Merk op dat er andere niet-BMP-tekens zijn dan emoji, maar ik vermoed dat je zult merken dat ze hetzelfde probleem zullen hebben wanneer je ze probeert op te slaan.