Forudsat at du bare vil fjerne alle ikke-BMP-tegn, dvs. alt med et Unicode-kodepunkt på U+10000 og højere, kan du bruge et regex til at fjerne enhver UTF-16 surrogat kodeenheder fra strengen. For eksempel:
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
}
}
Her er "Cs" Unicode-kategorien for "surrogat".
Det ser ud til, at Regex
fungerer baseret på UTF-16-kodeenheder i stedet for Unicode-kodepunkter, ellers har du brug for en anden tilgang.
Bemærk, at der er andre ikke-BMP-tegn end emoji, men jeg formoder, at du vil opdage, at de vil have det samme problem, når du prøver at gemme dem.