Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 Char.IsSurrogate로 특정 문자의 서러게이트 코드 여부 확인하기

C#에서 문자열 내 특정 위치의 문자가 서러게이트(Surrogate) 코드를 포함하고 있는지 확인하려면 Char.IsSurrogate() 메서드를 사용할 수 있습니다.

Char.IsSurrogate() 메서드란?

Char.IsSurrogate(string str, int index)는 지정된 문자열에서 해당 인덱스 위치의 문자가 상위 서러게이트(U+D800~U+DBFF) 또는 하위 서러게이트(U+DC00~U+DFFF) 범위에 속하는지 판별합니다. 결과는 bool 값으로 반환되며, 서러게이트 문자이면 true, 그렇지 않으면 false를 반환합니다.

예제 1: 서러게이트 문자가 포함된 경우

다음 예제에서는 문자 배열에 서러게이트 코드 \uD800을 포함시킨 후, 인덱스 4번째 문자를 검사합니다.

using System;
public class Demo {
    public static void Main() {
        string str = new String(new char[] { 'k', 'm', 'g', 't', '\uD800' });
        bool res = Char.IsSurrogate(str, 4);
        if (res)
            Console.WriteLine("서러게이트 값이 포함되어 있습니다!");
        else
            Console.WriteLine("서러게이트 값이 포함되어 있지 않습니다!");
    }
}

출력 결과

서러게이트 값이 포함되어 있습니다!

인덱스 4에 위치한 \uD800은 유효한 상위 서러게이트이므로 Char.IsSurrogate()true를 반환한 것을 확인할 수 있습니다.

예제 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("서러게이트 값이 포함되어 있습니다!");
        else
            Console.WriteLine("서러게이트 값이 포함되어 있지 않습니다!");
    }
}

출력 결과

서러게이트 값이 포함되어 있지 않습니다!

인덱스 4의 문자 'w'는 일반 ASCII 문자이므로 서러게이트로 판별되지 않고 false가 반환됩니다.

정리

Char.IsSurrogate() 메서드는 유니코드 확장 문자(예: 이모지, 한글 확장 등 BMP 외부 문자)를 다룰 때 매우 유용합니다. UTF-16 환경에서 하나의 문자가 두 개의 char(상위·하위 서러게이트 쌍)로 표현될 수 있기 때문에, 문자열을 안전하게 처리하려면 서러게이트 여부 검사가 필요할 수 있습니다.