स्ट्रिंग में निर्दिष्ट पोजिशन पर कैरेक्टर में सरोगेट कोड है या नहीं जांचने के लिए Char.IsSurrogate मेथड का उपयोग करें।
सिंटैक्स
public static bool IsSurrogate(string s, int index);
सरोगेट पेयर्स क्या हैं?
- Unicode कैरेक्टर्स जो 2 UTF-16 कोड यूनिट्स (हाई सरोगेट + लो सरोगेट) का उपयोग करते हैं
- BMP (Basic Multilingual Plane) के बाहर के कैरेक्टर्स के लिए: इमोजी, दुर्लभ स्क्रिप्ट्स
- हाई सरोगेट रेंज: U+D800 से U+DBFF
- लो सरोगेट रेंज: U+DC00 से U+DFFF
उदाहरण 1: सरोगेट कंटेन करता है
using System;
public class Demo {
public static void Main() {
// \uD800 एक हाई सरोगेट है
string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
bool res = Char.IsSurrogate(str, 4); // इंडेक्स 4 पर चेक
if (res)
Console.WriteLine("Contains Surrogate value!");
else
Console.WriteLine("Does not contain Surrogate value!");
}
}
आउटपुट
Contains Surrogate value!
उदाहरण 2: कोई सरोगेट नहीं
using System;
public class Demo {
public static void Main() {
string str = new String(new char[] { 'k', 'm', 'g', 't', 'w' });
bool res = Char.IsSurrogate(str, 4);
if (res)
Console.WriteLine("Contains Surrogate value!");
else
Console.WriteLine("Does not contain Surrogate value!");
}
}
आउटपुट
Does not contain Surrogate value!
अतिरिक्त सरोगेट चेकिंग मेथड्स
string emoji = "😀"; // U+1F600 - सरोगेट पेयर का उपयोग करता है
// स्ट्रिंग में सरोगेट पेयर है?
Console.WriteLine(Char.IsSurrogatePair(emoji[0], emoji[1])); // True
// हाई सरोगेट चेक
Console.WriteLine(Char.IsHighSurrogate(emoji[0])); // True
// लो सरोगेट चेक
Console.WriteLine(Char.IsLowSurrogate(emoji[1])); // True
// सरोगेट पेयर से कोड पॉइंट प्राप्त करें
int codePoint = Char.ConvertToUtf32(emoji[0], emoji[1]); // 128512 (0x1F600)
// कोड पॉइंट से सरोगेट पेयर बनाएं
string fromCodePoint = Char.ConvertFromUtf32(128512); // "😀"
// Rune स्ट्रक्चर (C# 8.0+ / .NET Core 3.0+) - बेहतर Unicode हैंडलिंग
Rune rune = new Rune('😀');
Console.WriteLine(rune.IsValid); // True
Console.WriteLine(rune.Value); // 128512
व्यावहारिक उपयोग
public static int CountActualCharacters(string s) {
int count = 0;
for (int i = 0; i < s.Length; i++) {
if (i + 1 < s.Length && Char.IsSurrogatePair(s[i], s[i + 1])) {
count++;
i++; // अगला कैरेक्टर स्किप करें (पेयर का हिस्सा)
}
else if (!Char.IsSurrogate(s, i)) {
count++; // रेगुलर कैरेक्टर या अनपेयर्ड सरोगेट
}
}
return count;
}
// या .NET Core 3.0+ में सरल:
int charCount = s.EnumerateRunes().Count();