BMP以外のすべての文字、つまりUnicodeコードポイントがU + 10000以上の文字をすべて削除したい場合は、正規表現を使用してUTF-16代理を削除できます。 文字列からのコード単位。例:
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
}
}
ここで、「Cs」は「代理」のUnicodeカテゴリです。
Regex
のようです UnicodeコードポイントではなくUTF-16コードユニットに基づいて機能します。そうでない場合は、別のアプローチが必要になります。
絵文字以外の非BMP文字もありますが、保存しようとすると同じ問題が発生する可能性があります。