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

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

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

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

{| class="wikitable"
|-
! 제목 !! 묘사
|-
| 정규화 방식 D (NFD) || 정준 분해
|-
| 정규화 방식 C (NFC) || 정준 분해한 뒤에 다시 정준 결합
|-
| 정규화 방식 KD (NFKD) || 호환 분해
|-
| 정규화 방식 KC (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) + '''◌&#774;''' (U+0306)
** 한글을 한글 소리마디 영역(U+AC00~U+D7A3)으로 썼을 경우, 이를 [[옛한글#첫가끝 코드|첫가끝 코드]]로 처리하기
*** '''위''' (U+C704) → '''ᄋ''' (U+110B) + '''ᅱ''' (U+1171)
*** '''한''' (U+D55C) → '''ᄒ''' (U+1112) + '''ᅡ''' (U+1161) + '''ᆫ''' (U+11AB)
** 표준과 다른 조합 순서를 제대로 맞추기
*** '''e''' (U+0071) + '''◌&#775;''' (U+0307) + '''◌̣''' (U+0323) → '''e''' (U+0071) + '''◌̣''' (U+0323) + '''◌&#775;''' (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) + '''◌&#774;''' (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) - 종성을 뺀 초성과 중성까지만 변환할 수 있는 경우, 알고리듬에 따라 거기까지만 변환한다<ref>{{저널 인용
|url      = http://www.unicode.org/versions/Unicode7.0.0/ch03.pdf#Hangul
|제목     = The Unicode Standard Core Specification, Chapter 3. Conformance
|확인날짜 =
|저자     = 
|날짜 = 2014-07-16
|출판사   = The Unicode Consortium
|형식 = PDF
|쪽 = 78(149)
|판 = 버전 7.0.0
|인용  = if neither case was true, just add the character
|언어 = 영어
}}</ref>
**** [[한국산업표준|대한민국 산업 표준]] [[KS X 1026-1]]은 '현대 한글 초성 + 현대 한글 중성 + 옛한글 종성'으로 이루어진 옛한글 완성자를 표현할 때 현대 한글 완성자를 사용하지 말고 첫가끝 한글 낱자들만을 사용할 것을 요구한다.
*NFKD로의 정규화: 코드를 호환 분해한다.
** 합자 처리된 알파벳 코드를 각 알파벳으로 분해하기
*** '''ﬁ''' (U+FB01) → '''f''' (U+0066) + '''i''' (U+0069)
** 옛 알파벳을 현대 알파벳으로 바꾸기
*** '''ſ''' (U+017F) → '''s''' (U+0073)
*** '''ẛ''' (U+1E9B) → '''s''' (U+0073) + '''◌&#775;''' (U+0307)
*NFKC로의 정규화: 코드를 호환 분해한 뒤에 다시 정준 결합한다.
** [[발음 구별 기호]]가 있는 옛 알파벳을 현대 알파벳으로 바꾸기
*** '''ẛ''' (U+1E9B) → '''ṡ''' (U+1E61)
*모든 기준에서의 공통된 정규화
** [[한중일 호환용 한자]]를 [[한중일 통합 한자]]로 처리하기
*** '''樂''' (U+F914), '''樂''' (U+F95C), '''樂''' (U+F9BF) → '''樂''' (U+6A02)
** 전용 기호를 모양이 같은 보편적인 기호로 바꾸기
*** '''Ω''' (U+2126, [[옴 (단위)|옴]] 기호) → '''Ω''' (U+03A9, [[Ω|오메가]])

== 같이 보기 ==
* [[발음 구별 기호]]
* [[유니코드]]
== 각주 ==
<references/>

== 외부 링크 ==
* [https://web.archive.org/web/20071009000026/http://www.sdnkorea.com/blog/347 텍스트 정규화(Text Normalization) - 한국 썬 개발자 네트워크]
* [http://unicode.org/reports/tr15/ UAX #15: 유니코드 정규화 방식(영어)]

[[분류:유니코드]]