1 ответ:
Предполагая, что вы просто хотите удалить все символы, не являющиеся 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 "- это категория Юникода для"суррогата".
Похоже, что
Regexработает на основе кодовых единиц UTF-16, а не кодовых точек Unicode, в противном случае вам потребуется другой подход.Обратите внимание, что существуют не-BMP символы другие чем emoji, но я подозреваю, что вы обнаружите, что у них будет та же проблема, когда вы попытаетесь их сохранить.
Comments