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

C# Char.IsSurrogate(String, Int32) 메서드 완벽 정리

C#의 Char.IsSurrogate() 메서드는 지정한 위치의 문자가 서러게이트(surrogate) 코드 단위인지 여부를 확인하는 데 사용됩니다. 서러게이트 코드 단위란 UTF-16 인코딩에서 기본 다국어 평면(BMP) 밖의 문자를 표현하기 위해 사용되는 특수한 코드 단위로, 상위 서러게이트(U+D800~U+DBFF)와 하위 서러게이트(U+DC00~U+DFFF)로 나뉩니다.

구문

메서드의 기본 구문은 다음과 같습니다.

public static bool IsSurrogate(string str, int index);

매개변수 설명

  • str: 검사 대상이 되는 문자열입니다.
  • index: str 내에서 평가할 문자의 위치(인덱스)입니다.

지정한 인덱스의 문자가 서러게이트 코드 단위에 해당하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

예제 1: 서러게이트 값이 포함된 경우

다음은 Char.IsSurrogate() 메서드를 실제로 구현한 첫 번째 예제입니다.

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("Contains Surrogate value!");
      else
         Console.WriteLine("Does not contain Surrogate value!");
   }
}

출력 결과

Contains Surrogate value!

문자열의 4번째 인덱스에 위치한 문자 \uD800은 상위 서러게이트 범위(U+D800~U+DBFF)에 속하므로 true가 반환되어 "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!

4번째 인덱스의 문자 'w'는 일반 문자이므로 서러게이트 코드 단위가 아니며, 따라서 false가 반환됩니다.

정리

Char.IsSurrogate() 메서드는 유니코드 확장 영역 문자를 처리할 때 유용하게 활용됩니다. 특히 이모지나 희귀 한자처럼 BMP 밖의 문자를 다루는 문자열 파싱 로직에서 잘못된 문자 분리를 방지하기 위해 자주 사용됩니다.