C#의 Char.IsHighSurrogate() 메서드는 문자열 내 지정된 위치에 있는 Char 객체가 상위 서러게이트(High Surrogate)인지 여부를 판별합니다.
상위 서러게이트란?
유니코드는 U+FFFF 이상의 확장된 문자를 표현하기 위해 UTF-16 인코딩에서 서러게이트 쌍(Surrogate Pair)을 사용합니다. 상위 서러게이트는 유니코드 범위 U+D800부터 U+DBFF 사이의 코드 포인트를 의미하며, 하위 서러게이트(U+DC00~U+DFFF)와 함께 하나의 문자를 구성합니다. 따라서 문자열을 처리할 때 특정 위치의 문자가 상위 서러게이트인지 확인하는 것은 매우 중요합니다.
구문
메서드의 기본 구문은 다음과 같습니다 −
public static bool IsHighSurrogate (string str, int index);
각 매개변수의 의미는 다음과 같습니다.
- str: 검사 대상이 되는 문자열입니다.
- index: 문자열 str에서 평가할 문자의 위치(0부터 시작하는 인덱스)입니다.
지정된 위치의 문자가 유효한 상위 서러게이트이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 참고로 str이 null이면 ArgumentException이 발생하며, index가 문자열 범위를 벗어나면 ArgumentOutOfRangeException이 발생합니다.
예제 1: 상위 서러게이트 위치 검사
Char.IsHighSurrogate() 메서드의 실제 사용 예시를 살펴보겠습니다 −
using System;
public class Demo {
public static void Main(){
string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
bool res = Char.IsHighSurrogate(str, 4);
if (res)
Console.WriteLine("Contains High Surrogate value!");
else
Console.WriteLine("Does not contain High Surrogate value!");
}
}
위 코드에서 인덱스 4번째 위치의 문자는 '\uD800'으로, 유효한 상위 서러게이트 범위(U+D800~U+DBFF)에 해당합니다. 실행 결과는 다음과 같습니다 −
Contains High Surrogate value!
예제 2: 일반 문자 위치 검사
이번에는 동일한 문자열에서 상위 서러게이트가 아닌 위치를 검사해 보겠습니다 −
using System;
public class Demo {
public static void Main(){
string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
bool res = Char.IsHighSurrogate(str, 2);
if (res)
Console.WriteLine("Contains High Surrogate value!");
else
Console.WriteLine("Does not contain High Surrogate value!");
}
}
인덱스 2번째 위치의 문자는 일반 문자 'g'이므로 상위 서러게이트가 아닙니다. 실행 결과는 다음과 같습니다 −
Does not contain High Surrogate value!
마무리
Char.IsHighSurrogate(String, Int32) 메서드는 UTF-16 문자열을 다룰 때 확장 유니코드 문자를 올바르게 처리하기 위한 필수적인 도구입니다. 특히 국제화(i18n) 작업이나 이모지 등 BMP 외부 문자를 처리하는 프로그램에서 문자열을 안전하게 순회하고 조작할 때 유용하게 활용할 수 있습니다.