문자열과 문자 (Strings and Characters) - 유니코드 (Unicode)

00yhsp·2024년 4월 2일

유니코드 (Unicode) 는 인코딩, 표기, 그리고 다른 쓰기 시스템에서의 텍스트 프로세싱을 위한 국제 표준이다.
거의 모든 언어의 문자를 표준화된 형식으로 표현하고 텍스트 파일 또는 웹 페이지와 같은 외부 소스에서 해당 문자를 읽고 쓸 수 있습니다.
Swift의 String 과 Character 타입은 유니코드를 완벽하게 지원한다.

유니코드 스칼라 값 (Unicode Scalar Values)

Swift의 기본 String 타입은 유니코드 스칼라 값 (Unicode scalar values)으로부터 생성된다.
유니코드 스칼라 값은 LATIN SMALL LETTER A ("a")의 경우 U+0061 또는 FRONT-FACING BABY CHICK ("🐥")의 경우 U+1F425 와 같은 문자를 위한 유니크한 21-bit 숫자 또는 수정자이다.

모든 21-bit 유니코드 스칼라 값이 한 문자에 할당되는 것은 아니다.
어떤 스칼라는 나중에 할당되거나 UTF-16 인코딩에 사용하기 위해 지정되어 있다.
문자에 할당된 스칼라 값은 일반적으로 위의 예에서 LATIN SMALL LETTER A 와 FRONT-FACING BABY CHICK 같이 이름을 가지고 있다.

확장된 문자소 클러스터 (Extended Grapheme Clusters)

Swift의 Character 타입의 모든 인스턴스는 하나의 확장된 문자소 클러스터 (extended grapheme cluster) 로 표기된다.
하나의 확장된 문자소 클러스터는 결합되었을 때 사람이 읽을 수 있는 하나의 문자인 하나 이상의 유니코드 스칼라이다.

문자 é 은 단일 유니코드 스칼라 é (LATIN SMALL LETTER E WITH ACUTE, or U+00E9)로 표기 가능하다.
그러나 동일 문자를 표준 문자 e (LATIN SMALL LETTER E, or U+0065) 이어서 COMBINING ACUTE ACCENT 스칼라 (U+0301)가 오는 스칼라 쌍으로 표시할 수도 있다.
COMBINING ACUTE ACCENT 스칼라는 앞에 있는 스칼라에 그래픽으로 적용되어 유니코드 인식 텍스트 렌더링 시스템에서 렌더링 될 때 e 를 é 로 변환한다.

두 경우 모두 문자 é 는 확장된 문자소 클러스터를 나타내는 단일 Swift 문자값으로 표시된다.
첫 번째의 경우에는 클러스터에 단일 스칼라가 포함된다.
두 번째의 경우에는 두 스칼라의 클러스터이다.

let eAcute: Character = "\u{E9}"                         // é
let combinedEAcute: Character = "\u{65}\u{301}"          // e followed by ́
// eAcute is é, combinedEAcute is é

확장된 문자소 클러스터는 많은 복잡한 스크립트 문자를 하나의 Character 값으로 표기하는 방법이다.
한글의 한글 음절은 단일 시퀀스 또는 분해된 시퀀스로 표시될 수 있다.
이 두 표현은 모두 Swift에서 단일 Character 값으로 표시된다.

let precomposed: Character = "\u{D55C}"                  // 한
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ᄒ, ᅡ, ᆫ
// precomposed is 한, decomposed is 한

확장된 문자소 클러스터는 마크(예를 들어 COMBINING ENCLOSING CIRCLE 또는 U+20DD)를 둘러싸는 스칼라를 사용하여 다른 유니코드 스칼라를 단일 문자값의 일부로 묶을 수 있다.

let enclosedEAcute: Character = "\u{E9}\u{20DD}"
// enclosedEAcute is é⃝

국가 표시 기호에 대한 유니코드 스칼라를 쌍으로 결합하여 단일 Character 값으로 만들 수 있다.
예를 들어 REGIONAL INDICATOR SYMBOL LETTER U(U+1F1FA) 와 REGIONAL INDICATOR SYMBOL LETTER S (U+1F1F8) 의 결합이 있다.

let regionalIndicatorForUS: Character = "\u{1F1FA}\u{1F1F8}"
// regionalIndicatorForUS is 🇺🇸
profile
iOS Dev

0개의 댓글