मान लें कि आप सभी गैर-बीएमपी वर्णों को हटाना चाहते हैं, यानी यू+10000 और उच्चतर के यूनिकोड कोड बिंदु के साथ कुछ भी, आप किसी भी यूटीएफ -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 कोड इकाइयों के आधार पर काम करता है, अन्यथा आपको एक अलग दृष्टिकोण की आवश्यकता होगी।
ध्यान दें कि इमोजी के अलावा अन्य गैर-बीएमपी वर्ण हैं, लेकिन मुझे संदेह है कि आप पाएंगे कि जब आप उन्हें संग्रहीत करने का प्रयास करेंगे तो उन्हें भी यही समस्या होगी।