Angenommen, Sie möchten nur alle Nicht-BMP-Zeichen entfernen, d. h. alles mit einem Unicode-Codepunkt von U+10000 und höher, können Sie einen regulären Ausdruck verwenden, um jedes UTF-16-Ersatzzeichen zu entfernen Codeeinheiten aus der Zeichenfolge. Zum Beispiel:
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 ist „Cs“ die Unicode-Kategorie für „Ersatz“.
Es scheint, dass Regex
funktioniert auf der Grundlage von UTF-16-Codeeinheiten und nicht von Unicode-Codepunkten, andernfalls benötigen Sie einen anderen Ansatz.
Beachten Sie, dass es neben Emojis auch andere Nicht-BMP-Zeichen gibt, aber ich vermute, Sie werden feststellen, dass sie das gleiche Problem haben werden, wenn Sie versuchen, sie zu speichern.