Dengan asumsi Anda hanya ingin menghapus semua karakter non-BMP, yaitu apa pun dengan titik kode Unicode U+10000 dan lebih tinggi, Anda dapat menggunakan regex untuk menghapus pengganti UTF-16 apa pun unit kode dari string. Misalnya:
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
}
}
Di sini "Cs" adalah kategori Unicode untuk "pengganti".
Tampaknya Regex
bekerja berdasarkan unit kode UTF-16 daripada poin kode Unicode, jika tidak, Anda memerlukan pendekatan yang berbeda.
Perhatikan bahwa ada karakter non-BMP selain emoji, tetapi saya rasa Anda akan menemukan masalah yang sama ketika Anda mencoba menyimpannya.