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