유니코드에서 한글을 어떻게 다루는지를 정리하였다.
- 유니코드(Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준 (위키 백과)
- 단순히 문자마다 번호를 붙임
- 계속 업데이트되며 현재는 Unicode Version 9.0.0 이 최신이다.
- 유니코드를 실제 파일 등에 어떻게 기록할 것인지를 표준화한 것이다.
- 유니코드는 문자를 각 숫자에 대응시킨 것에 불과하고 이를 실제 비트로 표현하는 방식은 다양하다
- UTF-8, UTF-16 등이 있다.
Unicode Consortium의 Version 9.0.0 데이터베이스에 따르면 유니코드에서 한글이 지정된 블록은 다음과 같다. [참고]
- Hangul Jamo: 1100 ~ 11FF
- Currency Symbols 중 WON SIGN : 20A9
- CJK Symbols and Punctuation 중 HANGUL DOT TONE MARK: 302E ~ 302F
- Hangul Compatibility Jamo : 3130 ~ 318F
- Enclosed CJK Letters and Months 중 한글/한국어 부분 : 3200 ~ 321E, 3260 ~ 327F
- Hangul Jamo Extended-A : A960 ~ A97F
- Hangul Syllables : AC00 ~ D7AF
- Hangul Jamo Extended-B : D7B0 ~ D7FF
- Halfwidth and Fullwidth Forms 중 Halfwidth Hangul variants 부분 : FFA0 ~ FFDC
- Halfwidth and Fullwidth Forms 중 FULLWIDTH WON SIGN FFE6
편의상 한국어와 한글은 구분하지 않았다.
한글을 구성하는 가장 작은 단위인 자모에 부여된 유니코드이다.
한글 자모를 기록한 영역이다. 초성, 중성, 종성으로 구성되어 있으며 각 자모 영역은 현대 한글과 옛 한글로 나뉘어 있다.
Hangul Jamo 영역에서 추가된 옛 한글 초성 블록이다.
Hangul Jamo 영역에서 추가된 옛 한글 중성, 종성 블록이다.
과거 한국에서 쓰였던 한글 문자 표준 (KS X 1001)과 호환되는 한글 자모 영역이다. 앞선 자모 영역과 달리 자음에 초성, 종성 구분이 없다.
자주 사용되는 한글 음절을 표현한 블록이다. 한국에서 사용되는 많은 시스템이 이 블록을 사용한다.
원화 기호 (₩)를 지정한 유니코드 문자이다. 일반적으로 많이 사용하는 기호 \ 는 표준적인 원화 문자가 아니다.
중세 한국어에 존재했던 성조를 표시하기 위한 방점 기호이다. 위키백과 방점 한개 혹은 두개가 존재한다.
한글 원 기호와 괄호 기호를 표현한 영역이다. 다음 영역으로 구분되어 있다.
- Parenthesized Hangul letters : 한글 자음 괄호 기호
- Parenthesized Hangul syllables : 한글 음절 괄호 기호
- Parenthesized Korean words : 한국어 단어 괄호 기호 (오전, 오후)
- Circled Hangul letters : 한글 자음 원 기호
- Circled Hangul syllables : 한글 음절 원 기호
- Circled Korean words : 한글 단어 원 기호 (참고, 주의)
- Circled Hangul syllable : 추가 한글 음절 원 기호 (우)
- Symbol : 한국 추가 기호 Korean Standard 기호 (K 마크)
한글 반각 기호 영역이다. 현대 한글 자모만 존재한다. 일반적인 한글 자모 표기 방법은 전각이다.
앞서 살펴본 것처럼 유니코드에서 한글을 표시하는 방법은 다양하다. 같은 글을 표현하더라도 사용하는 코드 블록에 따라 다르게 저장된다. 예를 들어, 각 이라는 문자는 한글 자모 영역을 이용해 ㄱ + ㅏ + ㄱ 으로 저장하거나 한글 음절 영역을 이용해 각이라는 하나의 문자로 저장할 수 있다. 만일 텍스트를 저장할 때 규칙 없이 저장한다면 후에 데이터 처리가 불편해질 것이다.
이 문제를 해결하기 위해 유니코드는 텍스트를 한 가지 규칙을 이용하여 정규화하여 저장하는 것을 권장한다. 정규화 규칙에는 NFD, NFC, NFKD, NFKC가 있다. (UAX #15)
한글에서는 NFKC, NFKD를 잘 사용하지 않으므로 생략하였다.
NFD는 모든 음절을 Canonical Decomposition(정준 분해)하여 한글 자모 코드를 이용하여 저장하는 방식이다. 즉, 각을 ㄱ + ㅏ + ㄱ 로 저장하는 방식이다. 이 방식은 현대 한글과 옛 한글을 동일한 방식으로 저장한다는 장점이 있지만 NFC 방식과 비교하여 텍스트의 크기가 커진다는 문제가 있다.
NFD는 macOS 시스템에서 주로 사용한다.
NFC는 모든 음절을 Canonical Decomposition(정준 분해) 후 Canonical Composition(정준 결합) 하는 방식이다. 즉, 각을 각이라는 하나의 문자로 저장하는 방식이다. 이 방식을 사용하면 NFD 방식보다 텍스트의 사이즈는 작아지게 된다. 하지만, 옛 한글 자모의 결합으로 이루어진 한글 음절 코드가 없으므로 이 음절은 Canonical Composition 하지 못하므로 자소가 분리된 체로 저장하게 된다. 이로 인해, 현대 한글과 옛 한글이 다른 방식으로 저장되므로 텍스트를 처리할 때 유의해야 한다.
NFC는 많은 GNU/Linux 시스템, Windows에서 주로 사용한다.