유니코드 등가성

유니코드 등가성(Unicode equivalence)은 특정한 일련의 코드포인트들이 반드시 동일 문자를 대표해야 하는 유니코드 문자 인코딩 표준의 사양이다. 이 기능은 비슷하거나 동일한 문자들을 포함하는 기존의 표준 문자 집합과의 호환성을 허용하기 위해 표준에 도입되었다.

유니코드는 2가지 개념을 제공하는데, 하나는 표준 형식의 등가성이고 나머지 하나는 호환성이다. 표준 형식의 등가성으로 정의되는 코드포인트 시퀀스는 인쇄와 출력을 할 때 동일한 모양과 의미를 가질 것으로 추정한다. 이를테면 코드포인트 U+006E(라틴어 소문자 "n")에 이어서 U+0303(결합 물결표 "◌̃")가 오면 하나의 코드포인트 U+00F1(스페인어 알파벳의 소문자 "ñ")과 동일하게 정의된다. 그러므로 이 시퀀스들은 동일한 방식으로 표시되어야 하고 이름의 알파벳순 배열이나 검색 등을 할 때 애플리케이션에서 동일하나 방식으로 처리되어야 한다.

이 표준은 동등한 문자 시퀀스를 대체함으로써 2개의 텍스트 중 어느 것이 와도 동일한 코드 포인트 시퀀스로 통합해주는 유니코드 정규화로 불리는 텍스트 정규화 절차를 정의한다.

정규화 
유니코드 정규화(Unicode normalization)는 모양이 같은 여러 문자들이 있을 경우 이를 기준에 따라 하나로 통합해 주는 일을 가리킨다. 그 기준으로는 아래 표와 같이 NFD, NFC, NFKD, NFKC가 있다.

정규화의 예 
NFD로의 정규화: 코드를 정준 분해한다.
 발음 구별 기호가 붙은 글자가 하나로 처리되어 있을 경우, 이를 기호별로 나누어 처리하기
 À (U+00C0) → A (U+0041) + ◌̀ (U+0300)
 ệ (U+1EC7) → e (U+0065) + ◌̂ (U+0302) + ◌̣ (U+0323)
 が (U+304C) → か (U+304B) + ◌゙ (U+3099)
 ポ (U+30DD) → ホ (U+30DB) + ◌゚ (U+309A)
 Й (U+0419) → И (U+0418) + ◌̆ (U+0306)
 한글을 한글 소리마디 영역(U+AC00~U+D7A3)으로 썼을 경우, 이를 첫가끝 코드로 처리하기
 위 (U+C704) → ᄋ (U+110B) + ᅱ (U+1171)
 한 (U+D55C) → ᄒ (U+1112) + ᅡ (U+1161) + ᆫ (U+11AB)
 표준과 다른 조합 순서를 제대로 맞추기
 e (U+0071) + ◌̇ (U+0307) + ◌̣ (U+0323) → e (U+0071) + ◌̣ (U+0323) + ◌̇ (U+0307)
NFC로의 정규화: 코드를 정준 분해한 뒤에 다시 정준 결합한다.
 발음 구별 기호(조합 분음 기호: U+0300~U+036F)가 잇따라 붙었을 경우, 이를 코드 하나로 처리하기
 A (U+0041) + ◌̀ (U+0300) → À (U+00C0)
 e (U+0065) + ◌̂ (U+0302) + ◌̣ (U+0323) → ệ (U+1EC7)
 か (U+304B) + ◌゙ (U+3099) → が (U+304C)
 ホ (U+30DB) + ◌゚ (U+309A) → ポ (U+30DD)
 И (U+0418) + ◌̆ (U+0306) → Й (U+0419)
 한글을 첫가끝 코드로 썼을 경우, 이를 한글 소리마디 영역(U+AC00~U+D7A3)으로 처리하기
 ᄋ (U+110B) + ᅱ (U+1171) → 위 (U+C704)
 ᄒ (U+1112) + ᅡ (U+1161) + ᆫ (U+11AB) → 한 (U+D55C)
 ᄃ (U+1103) + ᅲ (U+1172) + ᇰ (U+11F0) → 듀 (U+B4C0) + ᇰ (U+11F0) - 종성을 뺀 초성과 중성까지만 변환할 수 있는 경우, 알고리듬에 따라 거기까지만 변환한다
 대한민국 산업 표준 KS X 1026-1은 '현대 한글 초성 + 현대 한글 중성 + 옛한글 종성'으로 이루어진 옛한글 완성자를 표현할 때 현대 한글 완성자를 사용하지 말고 첫가끝 한글 낱자들만을 사용할 것을 요구한다.
NFKD로의 정규화: 코드를 호환 분해한다.
 합자 처리된 알파벳 코드를 각 알파벳으로 분해하기
 ﬁ (U+FB01) → f (U+0066) + i (U+0069)
 옛 알파벳을 현대 알파벳으로 바꾸기
 ſ (U+017F) → s (U+0073)
 ẛ (U+1E9B) → s (U+0073) + ◌̇ (U+0307)
NFKC로의 정규화: 코드를 호환 분해한 뒤에 다시 정준 결합한다.
 발음 구별 기호가 있는 옛 알파벳을 현대 알파벳으로 바꾸기
 ẛ (U+1E9B) → ṡ (U+1E61)
모든 기준에서의 공통된 정규화
 한중일 호환용 한자를 한중일 통합 한자로 처리하기
 樂 (U+F914), 樂 (U+F95C), 樂 (U+F9BF) → 樂 (U+6A02)
 전용 기호를 모양이 같은 보편적인 기호로 바꾸기
 Ω (U+2126, 옴 기호) → Ω (U+03A9, 오메가)

각주

외부 링크 
 텍스트 정규화(Text Normalization) - 한국 썬 개발자 네트워크
 UAX #15: 유니코드 정규화 방식(영어)

유니코드